Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/dom/media/test/   (Firefox Browser Version 153.0.1©)  Datei vom 27.6.2026 mit Größe 24 B image not shown  

Quelle  i2c-mt65xx.c   Sprache: C

 

// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2014 MediaTek Inc.
 :  comjava.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
 */


java.lang.StringIndexOutOfBoundsException: Range [28, 25) out of bounds for length 33
java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
##java.lang.StringIndexOutOfBoundsException: Range [38, 30) out of bounds for length 38
#include <linux/device.h>
#include <linux/dma-mapping.h>
#include <linux/err.h>
#include <linux/errno.h>
#include <linux/i2c.djava.lang.StringIndexOutOfBoundsException: Range [33, 30) out of bounds for length 38
java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
# <inuxinterrupt
#include <linux/io.h>
#include <linux/#define I2C_DMA_SKIP_CONFIG 0x0010
#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/module.h>
#include <linux/#java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 32
#includejava.lang.StringIndexOutOfBoundsException: Range [32, 24) out of bounds for length 32
#include <linux
i<inux/sched.h>
#include <linux/slab.h>

#define I2C_RS_TRANSFER <4
#define  MAX_STEP_CNT_DIV
#define 256
d  (<1java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
#  (1< )
#define define I2C_FAST_MODE_BUFFER  (300 / 3)
#define I2C_RS_MUL_CNFG   (1 << 15)
# java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 35
#define java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 0
#define I2C_IO_CONFIG_OPEN_DRAIN 0x0003
 xjava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
#define I2C_SOFT_RST   0d java.lang.StringIndexOutOfBoundsException: Range [40, 30) out of bounds for length 50

#define I2C_FIFO_ADDR_CLR  0x0001
djava.lang.StringIndexOutOfBoundsException: Range [23, 21) out of bounds for length 30
#define I2C_ST_START_CON java.lang.StringIndexOutOfBoundsException: Range [42, 39) out of bounds for length 50
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 32
#define I2C_TIME_CLR_VALUE  0          x<)
#define I2C_TIME_DEFAULT_VALUE  0x0003
  0x0002
#define
definejava.lang.StringIndexOutOfBoundsException: Range [33, 30) out of bounds for length 38
djava.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 32
#define I2C_RELIABILITY  0x0010
#define I2C_DMAACK_ENABLE  0x0008

#define I2C_DMA_CON_TX   0x0000
#define I2C_DMA_CON_RX   0x0001
# java.lang.StringIndexOutOfBoundsException: Range [28, 26) out of bounds for length 34
#define I2C_DMA_SKIP_CONFIG  0x0010
#define I2C_DMA_DIR_CHANGE  0x0200
#define I2C_DMA_START_EN@PMICjava.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 53
#define I2C_DMA_INT_FLAG_NONE  0x0000
#define I2C_DMA_CLR_FLAG  0x0000
#define I2C_DMA_WARM_RST  0x0001
#define I2C_DMA_HARD_RST  0x0002
definejava.lang.StringIndexOutOfBoundsException: Range [32, 29) out of bounds for length 37

#define MAX_SAMPLE_CNT_DIV  8
#define MAX_STEP_CNT_DIV  64
#define*@java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 51
#define MAX_CLOCK_DIV_5BITS  32
#define MAX_HS_STEP_CNT_DIV  8
#define java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 3
 java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 39
#_java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 42

java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 20
# java.lang.StringIndexOutOfBoundsException: Range [40, 26) out of bounds for length 50
#define main", "dma, """
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
#ERR_DET_EN( <5java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
  (<)
#define I2C_CONTROL_DMAACK_EN           (0x1 << 8)
#define java.lang.StringIndexOutOfBoundsException: Range [23, 19) out of bounds for length 27
(x< 0java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50

#define I2C_DRV_NAME   java.lang.StringIndexOutOfBoundsException: Range [22, 18) out of bounds for length 26

/**
 * enum I2C_TRANS_REPEATED_START,,
 *
 * @I2C_MT65XX_CLK_MAINjava.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 17
 *I      java.lang.StringIndexOutOfBoundsException: Range [50, 51) out of bounds for length 50
 * Fjava.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 18
*@2java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 49
*I   clocks
 */

enum i2c_mt65xx_clks {
 I2C_MT65XX_CLK_MAINjava.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 26
java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 20
 ,
 I2C_MT65XX_CLK_ARB,
 I2C_MT65XX_CLK_MAXjava.lang.StringIndexOutOfBoundsException: Range [28, 25) out of bounds for length 34
}

static const OFFSET_SCL_MIS_COMP_POINT,
 "main", java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 35
};

enum  u16java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 37
java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 23
 OFFSET_INT_ENjava.lang.StringIndexOutOfBoundsException: Range [22, 18) out of bounds for length 26
 OFFSET_EN = 0x08,
 OFFSET_RST = 0x0c,
 OFFSET_CON = 0x18,
 OFFSET_TX_MEM_ADDR]  
java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 27
 java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 22
 OFFSET_RX_LEN 
   
java.lang.StringIndexOutOfBoundsException: Range [21, 18) out of bounds for length 26
};

enum i2c_trans_st_rs {
 I2C_TRANS_STOP = java.lang.StringIndexOutOfBoundsException: Range [27, 25) out of bounds for length 34

;

 {
java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 19
 java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 15
 I2C_MASTER_WRRD java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 37
}java.lang.StringIndexOutOfBoundsException: Range [20, 18) out of bounds for length 26

enum java.lang.StringIndexOutOfBoundsException: Range [23, 21) out of bounds for length 30
 OFFSET_TIMINGx,
 OFFSET_SLAVE_ADDR[java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 23
 OFFSET_INTR_MASKjava.lang.StringIndexOutOfBoundsException: Range [14, 11) out of bounds for length 20
 OFFSET_INTR_STAT,
 OFFSET_CONTROL,
 OFFSET_TRANSFER_LEN  java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
 OFFSET_TRANSAC_LENjava.lang.StringIndexOutOfBoundsException: Range [27, 18) out of bounds for length 27
 OFFSET_DELAY_LEN,
 ,
 java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 14
java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
 OFFSET_DCM_EN0java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 25
  const struct i2c_ad ;
 unsigned :;
  unsigned char dcjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
 java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 30

 OFFSET_SOFTRESET,
java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
 OFFSET_MULTI_DMA,
 java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 17
 OFFSET_DEBUGSTAT,
 OFFSET_DEBUGCTRL
 java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 25
 java.lang.StringIndexOutOfBoundsException: Range [5, 4) out of bounds for length 8
 OFFSET_LTIMING;
 java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 27
 java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 16
 struct mtk_i2c
 java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 26
 OFFSET_HS_STA_STO_AC_TIMING,
 OFFSET_SDA_TIMING,
} java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 32

static void __iomem /
 ]  
 [OFFSET_SLAVE_ADDR] = 0x4,
 [java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0
[java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 26
[java.lang.StringIndexOutOfBoundsException: Range [19, 16) out of bounds for length 25
 [OFFSET_TRANSFER_LEN;
LEN  java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
 ]  java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
 [OFFSET_TIMING] = 0x20,
 [OFFSET_START] = 0 * @min_low_ns: min LOWthe 
 [OFFSET_EXT_CONF] = 0x28,
 [OFFSET_FIFO_STAT] = 0x30,
[java.lang.StringIndexOutOfBoundsException: Range [22, 20) out of bounds for length 29
 [OFFSET_FIFO_ADDR_CLR] = 0x38,
 [OFFSET_IO_CONFIG] = 0x40,
[]  x,
 ,
 [OFFSET_SOFTRESET]java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 28
ET_DCM_EN] 
 [OFFSET_PATH_DIR] = 0x60,
 [OFFSET_DEBUGSTAT] = 0x64,
 [OFFSET_DEBUGCTRL] = 0x68,
 [OFFSET_TRANSFER_LEN_AUX] = 0x6c,
[java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 27
 [OFFSET_SCL_HIGH_LOW_RATIO.max_hd_dat_ns =400-I2C_FAST_MODE_PLUS_BUFFER,
 [java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 2
[OFFSET_SCL_MIS_COMP_POINT] = 0x7C,
 [java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 0
 [java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 15
 [OFFSET_SDA_TIMING]  java.lang.StringIndexOutOfBoundsException: Range [16, 13) out of bounds for length 18
;

static const u16 mt_i2c_regs_v2[] = {
[FFSET_DATA_PORT] =0,
 [OFFSET_SLAVE_ADDR] =.java.lang.StringIndexOutOfBoundsException: Range [16, 14) out of bounds for length 19
[java.lang.StringIndexOutOfBoundsException: Range [20, 18) out of bounds for length 26
 [java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 2
 [OFFSET_CONTROL] = 0x10,
 [OFFSET_TRANSFER_LEN] = 0
[  x,
 [OFFSET_DELAY_LENjava.lang.StringIndexOutOfBoundsException: Range [20, 17) out of bounds for length 23
 [OFFSET_TIMING] = 0x20,
 [auto_restart=java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
 [ 0,
 [OFFSET_LTIMING
 [static const struct mtk_i2c_compatible mt8168_compat = {
 [ java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 22
java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
 [OFFSET_SDA_TIMING] = 0x3c,java.lang.StringIndexOutOfBoundsException: Range [18, 14) out of bounds for length 19
 [] =0java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
K_DIV]=x,
 Ojava.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 27
[java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 27
 [java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 2
 [OFFSET_DEBUGSTAT] = 0xe4,
 [OFFSET_DEBUGCTRL java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 18
 [apdma_sync ,
 [OFFSET_FIFO_THRESH] = 
 [=java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 24
};

static const  .ltiming_adjust,
 [OFFSET_DATA_PORT] =  java.lang.StringIndexOutOfBoundsException: Range [19, 17) out of bounds for length 23
 java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 26
 [OFFSET_INTR_STAT]. =1
 [OFFSET_CONTROL  java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
 [java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 2
 [
 [OFFSET_DELAY_LEN] = 0x1c,
 [OFFSET_TIMING] = 0x20pmic_i2c =0,
 [OFFSET_START] =.java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 15
 [OFFSET_EXT_CONF
 [  0,
 O 0java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 20
 [OFFSET_IO_CONFIG] ={java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 65
[java.lang.StringIndexOutOfBoundsException: Range [24, 22) out of bounds for length 31
 [OFFSET_SDA_TIMING] = 0x3c,
 [.compatible java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 65
 [  java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 65
 [OFFSET_SOFTRESET] = 0java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 2
 [OFFSET_MULTI_DMA] = 0x8c,
 [OFFSET_SCL_MIS_COMP_POINT] =java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 [OFFSET_SLAVE_ADDR
 [OFFSET_DEBUGSTAT] = 0xe4,
 java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 48
 [OFFSET_FIFO_STAT
 [OFFSET_FIFO_THRESHjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 [OFFSET_DCM_EN] = 0xf88,
};

struct mtk_i2c_compatible {
 const struct java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 13
 const u16 * writel(I2C_DMA_java.lang.StringIndexOutOfBoundsException: Range [33, 30) out of bounds for length 50
char  ;
 java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 55
 unsigned char auto_restart: 1;
   ;
 unsigned   -java.lang.StringIndexOutOfBoundsException: Range [42, 40) out of bounds for length 55
 unsigned char (c>java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 24
 unsigned java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 0
 unsigned char java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 0
 unsigned char max_dma_support;
};

struct java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0
;
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
  hs;
 u16 ext;
 u16 inter_clk_div;
 u16 scl_hl_ratio;
 u16 hs_scl_hl_ratio;
 u16 sta_stop;
 u16 hs_sta_stop;
 ;
};

struct mtk_i2c {
struct i2c_adapter adap; /* i2c host adapter */

 struct device *dev;
   java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
 struct i2c_timings java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 10

 /* set in i2c probe */
 _java.lang.StringIndexOutOfBoundsException: Range [19, 13) out of bounds for length 41
  java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 54
 struct clk_bulk_data clocks[I2C_MT65XX_CLK_MAX]; /* clocks for i2c */
  java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 47
 bool use_push_pull; java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 50

u16 ; /* interrupt status */
 unsigned int clk_src_div;
 intspeed_hz /
 enum mtk_trans_op op;
 u16 timing_reg;
 u16 high_speed_reg;
   (-java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
 unsigned char java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 0
 bool
 struct  i2c->dev_comp)
 java.lang.StringIndexOutOfBoundsException: Range [34, 32) out of bounds for length 43
}

/**
  :
 * @min_low_ns: min LOW period of the SCL clock
 : set-time repeated 
 *mjava.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 37
 * @java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 1
 */

struct i2c_spec_values {
 unsigned int min_low_ns;
 unsigned int min_su_sta_ns;
 unsigned int max_hd_dat_ns;
 unsigned int min_su_dat_ns;
};

static const  s =1 java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
 .min_low_ns = 4700 + java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 6
 .min_su_sta_ns = 4700 + if (i2c->ac_timing.inter_clk_divjava.lang.StringIndexOutOfBoundsException: Range [38, 34) out of bounds for length 40
     java.lang.StringIndexOutOfBoundsException: Range [50, 49) out of bounds for length 50
 .min_su_dat_ns = 250 + java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 6
};

static const java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 1
 .  ac
 .min_su_sta_ns = 600 + I2C_FAST_MODE_BUFFER,
 .max_hd_dat_ns = 900 -
 *java.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 19
};

static const struct i2c_spec_values fast_mode_plus_spec = {
 .min_low_ns = 500 + I2C_FAST_MODE_PLUS_BUFFER,
 .min_su_sta_ns = 260 + I2C_FAST_MODE_PLUS_BUFFER,
 .max_hd_dat_ns* java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 46
 .min_su_dat_ns = 50 + I2C_FAST_MODE_PLUS_BUFFER,
};

static java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
 .flags = I2C_AQ_COMB_WRITE_THEN_READ,
 .max_num_msgs = 1,
 .max_write_len = 255,
 .max_read_len = 255,
 .max_comb_1st_msg_len = 255,
 .max_comb_2nd_msg_len = 31,
};

static const struct i2c_adapter_quirks mt7622_i2c_quirks = {
 .max_num_msgs = 255,
};

static const struct i2c_adapter_quirks mt8183_i2c_quirks = {
 .flags = I2C_AQ_NO_ZERO_LEN,
};

java.lang.StringIndexOutOfBoundsException: Range [52, 6) out of bounds for length 56
.=java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 24
 .pmic_i2c = 0,
.  ,
 1
 .aux_len_reg = 1,
 .timing_adjust  java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 36
 .dma_sync = 0,
 .ltiming_adjust = 0,
 .apdma_sync = 0,
 .max_dma_support = 33,
};

java.lang.StringIndexOutOfBoundsException: Range [53, 52) out of bounds for length 56
 .quirks = &if (!i2c->dev_comp->timing_ad->timing_adjust
 .regs = mt_i2c_regs_v1,
 .pmic_i2c =  i--java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 35
 .dcm = 1,
 . = mtk_i2c_get;
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 .timing_adjust = 0,
 .dma_sync = 0,
 .ltiming_adjust = 0,
 .apdma_sync = 0,
 . su_sta_cnt(-java.lang.StringIndexOutOfBoundsException: Range [47, 46) out of bounds for length 48
};

static const struct mtk_i2c_compatible java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 30
 .quirks = &mt6577_i2c_quirks,
 .regs = mt_i2c_regs_v1,
 .pmic_i2c = 1,
 .  ,
 .auto_restart = 0,
.java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 18
 .timing_adjust = 0,
 .dma_sync = 0,
 .ltiming_adjust = 0,
 .apdma_sync = 0,
 .max_dma_support   java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 9
};

static mt7622_compat=
 .quirks = &java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 23
 .regs 
 .  ,
 .dcm = 1,
 . =1
 .aux_len_reg = java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 14
 .timing_adjust = 0,
 .dma_sync = 0,
 .ltiming_adjust   {
. =,
 .=32java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
};

 mt8168_compat java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56

 .pmic_i2c = 0,
 .dcm = 1,
 . =1java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
 .aux_len_reg = 1,
 .timing_adjust = 1,
 .dma_sync = 1,
 . (high_cnt |;
.= 0,
 .max_dma_support =   java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
};

static const struct mtk_i2c_compatible mt7981_compat = {
 .regs =  ((sda_max + sda_min))<6;
 .pmic_i2c } else {
 .dcm = 0,
 .auto_restart =1java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
 .aux_len_reg = 1,
 .i2c->ac_timing=sample_cnt < )|()java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
 .dma_sync =1,
 .ltiming_adjust = 1,
 .max_dma_support = 33
};

static const struct mtk_i2c_compatible mt7986_compat = {
 .quirks = &mt7622_i2c_quirks,
.regs  mt_i2c_regs_v1
 . su_sta_cnt
 .dcm  java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
 .auto_restart  -.=( <|
 .aux_len_reg = 1,
 .timing_adjust = 0,
 .dma_sync = 1,
 .ltiming_adjust = 0,
 .max_dma_support = 32,
};

static const struct 
 .regs = mt_i2c_regs_v1,
 .pmic_i2c = 0,
 .dcm = 1,
 .auto_restart =1
 .aux_len_reg = 1,
 .timing_adjust = 0,
 .dma_sync = 0,
 .ltiming_adjust = 0,
 .apdma_sync = 0,
 . * i2c_bus_freq java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 70
};

static const struct mtk_i2c_compatible mt8183_compat = {
 .quirks = &mt8183_i2c_quirks,
 .* clock_divinjava.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 69
 .pmic_i2c = 0,
 .dcm = 0,
 .auto_restart = 1,
 .aux_len_reg = 1,
 .timing_adjust = 1,
 .dma_sync = 1,
 .ltiming_adjust = 1,
 .apdma_sync = 0 Thejava.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 71
 .max_dma_support = 33,
};

static const struct mtk_i2c_compatible mt8186_compat = {
 .regs = mt_i2c_regs_v2,
 .pmic_i2c = 0,
 .dcm  or  - to
 .auto_restart = 1,
 .aux_len_reg = 1,
 .timing_adjust = 1,
 .dma_sync = 0,
 .ltiming_adjust = 1,
 .apdma_sync = 0,
 .sample_cnt 
};

java.lang.StringIndexOutOfBoundsException: Range [38, 6) out of bounds for length 56
 .regs = mt_i2c_regs_v3,
 .pmic_i2c      java.lang.StringIndexOutOfBoundsException: Range [19, 15) out of bounds for length 37
 .dcm = 0,
 .auto_restart = 1,
 .aux_len_reg = 1,
 .timing_adjust = 1,
 .dma_sync = 0,
 .ltiming_adjust = 1,
 .apdma_sync = 1,
 . int base_step;
}

static const struct mtk_i2c_compatible mt8192_compat =     -;
 .quirks = &mt8183_i2c_quirksjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 .regs = mt_i2c_regs_v2  =java.lang.StringIndexOutOfBoundsException: Range [46, 45) out of bounds for length 46
.java.lang.StringIndexOutOfBoundsException: Range [12, 10) out of bounds for length 15
 .dcm = 0,
 .auto_restart = 1,
 .aux_len_reg = 1,
java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 20
 .dma_sync = 1,
 .ltiming_adjust = 1,
 .apdma_sync = 1,
 .max_dma_support = 36,
};

static const struct of_device_id mtk_i2c_of_match[] = {
 { .compatible = "mediatek,mt2712-i2c", .data = &mt2712_compat },
 { . * sample_cntjava.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 36
 { .compatible = "mediatek,  java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 54
 { .compatible = "mediatek,mt7622-i2c", .data = &mt7622_compat },
 
    "," data&java.lang.StringIndexOutOfBoundsException: Range [64, 62) out of bounds for length 65
 { .compatible = "mediatek,mt8168-i2c",   java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 64
 { .compatible = "  s  java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 30
 { .compatible =  cjava.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 27
 { .compatible = "mediatek,mt8186-i2c",   java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 48
 { .compatible = "java.lang.StringIndexOutOfBoundsException: Range [1, 26) out of bounds for length 13
 { .compatible = "mediatek,mt8192-i2c java.lang.StringIndexOutOfBoundsException: Range [20, 18) out of bounds for length 32
{}
;
MODULE_DEVICE_TABLE(of, mtk_i2c_of_match);

 u16(java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 71
{
 return readw(i2c->base + java.lang.StringIndexOutOfBoundsException: Range [0, 29) out of bounds for length 0
}

returnjava.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 17
      enum I2C_REGS_OFFSET reg)
{
 writew(val, i2c->base + i2c->dev_comp
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1

static void mtk_i2c_init_hw mtk_i2c_set_speedjava.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 74
{
 u16 control_reg;
 u16 intr_stat_reg;
 u16 ext_conf_val;

 mtk_i2c_writew(i2c, I2C_CHN_CLR_FLAG,  java.lang.StringIndexOutOfBoundsException: Range [13, 9) out of bounds for length 27
 intr_stat_reg = mtk_i2c_readw( java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 26
 java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0

 if (i2c->dev_comp->apdma_sync) {ifi->java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 67
  writel(I2C_DMA_WARM_RST, i2c i->java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 39
  udelay(10);
  writel(I2C_DMA_CLR_FLAG, i2c->pdmabase + OFFSET_RST);
  udelay(10);
  writel(I2C_DMA_HANDSHAKE_RST | for (clk_div = 1; clk_div <= max_clk_div =; = java.lang.StringIndexOutOfBoundsException: Range [52, 50) out of bounds for length 55
        i2c>+)
  mtk_i2c_writew(i2c, java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
          OFFSET_SOFTRESET);
  udelay(10);
  writel   java.lang.StringIndexOutOfBoundsException: Range [36, 32) out of bounds for length 46
  mtk_i2c_writew(i2c, I2C_CHN_CLR_FLAG
 } else {
  writel(I2C_DMA_HARD_RST, i2c->pdmabase + OFFSET_RST);
  udelay(50);
  writel(I2C_DMA_CLR_FLAG, i2c->pdmabase
  java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 54
 }

 /* Set ioconfig */
 if (i2c->use_push_pull)
  mtk_i2c_writew(i2c, I2C_IO_CONFIG_PUSH_PULL &;
 else r <0java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
  mtk_i2c_writew(i2c,  i2c->high_speed_reg = I2C_TIME_DEFAULT_VALUE

 if (i2c->dev_comp
 java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 54

 mtk_i2c_writew(i2c, i2c->timing_reg, OFFSET_TIMING);
 - ;
(2--java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 35
  mtk_i2c_writew(i2c, i2c->ltiming_reg, OFFSET_LTIMING);

 if (i2c->speed_hz <       java.lang.StringIndexOutOfBoundsException: Range [27, 24) out of bounds for length 38
  ext_conf_val = I2C_ST_START_CON;
 else
  java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0

 if (i2c->dev_comp-  i2c->igh_speed_reg =I2C_TIME_CLR_VALUE;
  ext_conf_val = i2c->ac_timing   icd-
  mtk_i2c_writew  >java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 22
          OFFSET_CLOCK_DIV);
  mtk_i2c_writew(i2c java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
          java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 0
  mtk_i2c_writew(i2c, i2c->ac_timing.sda_timing,
          OFFSET_SDA_TIMING);

  if (i2c->->timing_adjust java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
    dev_dbg(i2c->dev": x%,INTR_MASK:0%\,
           OFFSET_TIMING);
 i2c -.,;
   mtk_i2c_writew(i2c, i2c->ac_timing.ltiming (i2c java.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 40
           OFFSET_LTIMING);
  } else {
   i2c>  xx java.lang.StringIndexOutOfBoundsException: Range [52, 51) out of bounds for length 61
           OFFSET_SCL_HIGH_LOW_RATIO);
   mtk_i2c_writew(i2c, i2c->ac_timing.hs_scl_hl_ratiodev_dbg>,DELAY_LEN0%,HTIMING xxn,
           OFFSET_HS_SCL_HIGH_LOW_RATIO);
   mtk_i2c_writew(i2c, i2c->ac_timing.sta_stop,
      OFFSET_STA_STO_AC_TIMINGjava.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
   mtk_i2c_writew(i2c, i2c->mtk_i2c_readw(i2c, OFFSET_EXT_CONF
          OFFSET_HS_STA_STO_AC_TIMING
  }
 }
 i2c,ext_conf_valOFFSET_EXT_CONF;

 /* If use i2c pin from PMIC mt6397 side, need set PATH_DIR first */
 if (i2c-> (2, ))
(,, );

 control_reg = I2C_CONTROL_ACKERR_DET_EN |
        I2C_CONTROL_CLK_EXT_EN | I2C_CONTROL_DMA_EN;
if(-dev_comp)
  control_reg |= I2C_CONTROL_DMAACK_EN | I2C_CONTROL_ASYNC_MODE;

 mtk_i2c_writew(i2c, control_reg, OFFSET_CONTROL); mtk_i2c_readwicOFFSET_DEBUGSTAT)
(2,I2C_DELAY_LENOFFSET_DELAY_LENjava.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
}

static const struct  mtk_i2c_readw(i2c, OFFSET_LTIMING
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 if (speed <= I2C_MAX_STANDARD_MODE_FREQdev_dbg(c> \:xx,:0\"
n &tandard_mode_spec
 else  (-pdmabase+))
  return & dev_dbg(i2c->dev, (->java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 51
 else
  return &fast_mode_plus_spec;


staticmtk_i2c_max_step_cnt int)
{
 ifREQ)
  return MAX_HS_STEP_CNT_DIV;
else
  return  (2c-dev,D:0%,:0xn"
}

static int mtk_i2c_get_clk_div_restri(java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 40
        unsignedint
{
 int clk_div_restri =0;

 if (i2c- i2c-pdmabase+))
  return 0;

 if (sample_cnt == 1) {static  (structmtk_i2c*c  *,
 if (2c->. =0java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
   clk_div_restri = 0  addr_reg
  else
   clk_div_restri = 1;
}else{
  if (i2c->ac_timing.inter_clk_div == 0)
   clk_div_restri = -1;
  else if (i2c->ac_timing.java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 19
   java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 22
  else
= 1
 }

 return clk_div_restri;
}

/*
 * Check and Calculate i2c ac-timing
 
 * Hardware design:
 * sample_ns = (1000000000 * (sample_cnt + 1)) / > = &num ){
 * xxx_cnt_div =  spec->min_xxx_ns return-;
 *
 * Sample_ns is rounded down for xxx_cnt_div would be greater
 *  smallest .
 * The sda_timing is chosen if(-speed_hz  ) |1)
 * the largest and smallest.
 */

static int mtk_i2c_check_ac_timing(struct mtk_i2c *i2c,
       unsigned int clk_src,
       unsigned int check_speed,
       unsigned int step_cnt,
       unsigned int sample_cnt)
{
 const struct i2c_spec_values *spec;
 unsigned int su_sta_cnt, low_cnt high_cnt,max_step_cnt
 unsigned I2C_ARB_LOST ,);
 unsigned java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  if (2-op==I2C_MASTER_WRRDjava.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34

 ->-t)
  return 0;

 if (i2c->dev_comp->ltiming_adjust)
  max_sta_cnt = 0x100;

spec=mtk_i2c_get_speccheck_speed;

 if (i2c->dev_comp       );
  clk_ns = 1000000000 / clk_src;
else
  clk_ns = sample_ns / 2;

 java.lang.StringIndexOutOfBoundsException: Range [26, 11) out of bounds for length 48
   mtk_i2c_writew(i2c, num,OFFSET_TRANSAC_LEN);
 if (su_sta_cnt > max_sta_cnt)
  return -1 }

 java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
 max_step_cnt =mtk_i2c_max_step_cnt(check_speed);
 if ((2 * step_cnt) > low_cnt && low_cnt < max_step_cnt) {
  if (low_cnt > step_cnt) {
   high_cnt =2 *step_cnt - low_cnt;
  } else {
   high_cnt =step_cnt;
   low_cnt = step_cnt;
  }
 } else {
  return -2;
 }

 sda_max = spec->max_hd_dat_ns / sample_ns;
  (da_max>low_cnt)
  sda_max = 0;

 sda_min = DIV_ROUND_UP(spec->min_su_dat_ns, sample_ns);
 if (sda_min < low_cnt)
  sda_min = 0;

 if (sda_min > return-java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
  return -;

 if (check_speed > I2C_MAX_FAST_MODE_PLUS_FREQ) {
 if i2c-dev_comp-ltiming_adjust) {
   i2c->ac_timing.hs = I2C_TIME_DEFAULT_VALUE |
    (sample_cnt << 12)  i2c_put_dma_safe_msg_buf(dma_rd_buf, msgs, false);
   i2c->ac_timing.ltiming &= ~GENMASK(15, 9);
   i2c->ac_timing.ltiming |= (sample_cnt << 12) |
    (low_cnt << 9);
   i2c->ac_timing.ext  if (2-dev_comp-max_dma_support  32){
  . | sjava.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 54
 }else
   i2c->ac_timing}
    (high_cnt << 6) | low_cnt;
   i2c-writel(u32) -pdmabase +OFFSET_RX_MEM_ADDR
  java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
  }
  i2c->ac_timing.writel(2C_DMA_INT_FLAG_NONE i2c-pdmabase + OFFSET_INT_FLAG)java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
  i2c->ac_timing.sda_timing |= (1 << 12
   ((sda_max + sda_min) / 2) << 6;
 
  if (i2c->java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 0
   i2c->ac_timing.htiming = (sample_cnt << 8)  msgs>len,DMA_TO_DEVICE)
  i2c->ac_timing->ac_timingltiming  (ample_cnt< 6)|()java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
   i2c->ac_timing.ext = (su_sta_cntjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  } else {
   i2c->ac_timing.scl_hl_ratio
 ( < ) |java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 30
   i2c->ac_timing.sta_stop = (su_sta_cnt < writel(reg_4g_mode i2c-pdmabase +OFFSET_TX_4G_MODE
    su_sta_cnt;
  }

  i2c->ac_timing.sda_timing = (1 << 12) |
 (da_max+ sda_min)/ java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
 }

 return 0;
}

/*
 * Calculate i2c port speed
 *
 * Hardware design:
 *  msgs->lenDMA_TO_DEVICE)
  clock_div:fixed  ,butmay  various in different SoCs
 *
 * The calculation want}
 * less than or equal to i2c->speed_hz. The calculation try to get
 * sample_cnt and step_cn
 */

static int mtk_i2c_calculate_speed(struct mtk_i2c *i2c, unsigned int   (sgs+1)-l,
       unsignedif (ma_mapping_errori2c-dev,rpaddr))java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
 _cnt
       unsigned int *
{
 unsigned int step_cnt;
 unsigned int sample_cnt;
 unsigned int max_step_cnt;
  int base_sample_cnt =MAX_SAMPLE_CNT_DIV
 unsigned int base_step_cnt java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
 unsigned  i--m  32 java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
 unsigned int best_mul;
 unsigned int cnt_mul;
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 int clk_div_restri = 0;

 if writel(eg_4g_mode, i2c->pdmabase + OFFSET_RX_4G_MODE);
  target_speed = java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 3

 max_step_cnt = mtk_i2c_max_step_cnt(target_speed);
 base_step_cnt = max_step_cnt;
 /* Find the best combination */
 opt_div = DIV_ROUND_UP(clk_src >> 1,  writel((u32)wpaddr, i2c->pdmabase + OFFSET_TX_MEM_u32wpaddr i2c-pdmabase+ OFFSET_TX_MEM_ADDR);
 best_mul = MAX_SAMPLE_CNT_DIV * max_step_cnt;

 /* Search for the best pair (sample_cnt, step_cnt) withl>java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 51
 *0<sample_cnt < MAX_SAMPLE_CNT_DIV
  * 0 < step_cnt < !>)java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
  * sample_cnt * step_cnt >= opt_div
 *optimizing for sample_cnt * step_cnt being minimal
 */

  =1 sample_cnt = MAX_SAMPLE_CNT_DIV sample_cnt++) {
  clk_div_restri = mtk_i2c_get_clk_div_restri(i2c, sample_cnt);
  step_cnt = DIV_ROUND_UP(opt_div + clk_div_restri, java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 27
  cnt_mul = step_cnt * sample_cnt;
  if (step_cnt > max_step_cnt)
   continue;

  if (cnt_mul < best_mul) {
   ret = mtk_i2c_check_ac_timing,clk_src,
    target_speed, step_cnt - 1, sample_cnt - 1);
   if (ret)
    continue;

    ;
   base_sample_cnt = sample_cnt  elseif (2-op= I2C_MASTER_RD
   base_step_cnt = step_cnt;
   i2c_put_dma_safe_msg_bufdma_rd_bufmsgsjava.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
   breakjava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
  }
 }

 if (ret)
 -java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17

 sample_cnt = base_sample_cnt;
 step_cnt = base_step_cnt;

 if ((clk_src / (2 * (sample_cnt * step_cnt - clk_div_restri))) >
  target_speed) {
 /
   * low i2c_bus_freq
 /
  dev_dbg(i2c->dev, "Unsupported speed (%uhz)\n i2c_dump_register(i2c);
  return -EINVAL;


 * = step_cnt- ;
 *timing_sample_cnt = sample_cnt - 1;

 return 0;
}

static int  dev_dbg(i2c "x ACK \">ddr;
{
 unsigned int clk_src;
 unsigned int step_cnt;
 unsigned int sample_cnt;
 unsigned int l_step_cnt;
 unsigned  return-
 unsigned int target_speed;
 unsigned int clk_div;
 unsigned int max_clk_div;
 int ret;

 target_speed =i2c-speed_hzjava.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
 parent_clk /= i2c->clk_src_div;

 if (i2c->dev_comp->timing_adjust && i2c->dev_comp->ltiming_adjust)
  max_clk_div = MAX_CLOCK_DIV_5BITS;
 else if (i2c- int retjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
  max_clk_div = MAX_CLOCK_DIV_8BITS;
 else
  max_clk_div = 1;

  structmtk_i2c*=i2c_get_adapdataadap;
  clk_src = parent_clk / clk_div;
  i2c->ac_timing.inter_clk_div = clk_div - java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

  if (target_speed > I2C_MAX_FAST_MODE_PLUS_FREQ) {
   /* Set master code speed register */
   ret = mtk_i2c_calculate_speed(i2c, clk_src,
            I2C_MAX_FAST_MODE_FREQ,
            &l_step_cnt,
    &l_sample_cnt)java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
   if (ret < 0)
    continue;

   i2cjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

   /* Set the high speed mode register */
  ret  mtk_i2c_calculate_speed(2,clk_srcjava.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
            target_speed, &step_cnt,
    );
   if (ret < 0read_en  true
    continue;

   i2c->high_speed_reg = I2C_TIME_DEFAULT_VALUE |
     (sample_cnt << 12) | (step_cnt << 8);

   if (i2c->dev_comp->ltiming_adjust)
    i2c->ltiming_reg =
     (l_sample_cnt << 6) | l_step_cntjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
     (sample_cnt << 12) | (step_cnt << 9);
   {
   ret = mtk_i2c_calculate_speed(i2c, clk_src,
            target_speed while (eft_num-){
            &l_sample_cnt);
  if r <0java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
    continue;

  i2c-timing_reg=(l_sample_cnt< )|l_step_cnt;

   /* Disable the high speed transaction */
   i2c->high_speed_reg = I2C_TIME_CLR_VALUE;

   if (i2c->dev_comp;
    java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
     (l_sample_cnt << 6) | l_step_cnt;
  }

  break;
 }


 return 0;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1

static void(structmtk_i2c *)
{
 dev_dbg>,"LAVE_ADDR:0%,INTR_MASK:0%\"
  mtk_i2c_readw(i2c,  msgs + 2;
  mtk_i2c_readw(i2c, OFFSET_INTR_MASK));
 dev_dbg(i2c->dev, "INTR_STAT: 0x%java.lang.StringIndexOutOfBoundsException: Range [1, 35) out of bounds for length 2
  mtk_i2c_readw(i2c, OFFSET_INTR_STAT),
  mtk_i2c_readw(i2c, java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 0
 dev_dbg(i2c->dev, "TRANSFER_LEN: 0x (I2C_MT65XX_CLK_MAX,-clocks);
  java.lang.StringIndexOutOfBoundsException: Range [40, 15) out of bounds for length 42
  mtk_i2c_readw(i2c, OFFSET_TRANSAC_LEN));
 dev_dbg(i2c->dev, "DELAY_LEN: 0x%x, HTIMINGu16 =i2c> ?I2C_RS_TRANSFER  0;
  mtk_i2c_readw(i2c, OFFSET_DELAY_LEN),
  mtk_i2c_readw(i2c, OFFSET_TIMING));
 dev_dbg(i2c->dev, "START: 0x%x, EXT_CONF: 0x%x\n",
  mtk_i2c_readw(i2c, OFFSET_START),
  mtk_i2c_readw(i2c *
dev_dbg(2c-d,"S: xx IO_CONFIG:0%\",
OFFSET_HS)java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
(i2c OFFSET_IO_CONFIG);
 dev_dbg(i2c->dev, "DCM_EN: 0x%x, TRANSFER_LEN_AUXjava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 34
 mtk_i2c_readw(2,OFFSET_DCM_EN)
  return ;
 dev_dbg(i2c->dev, "CLOCK_DIV:
 ),
 {
 dev_dbg(i2c-  i2c_check_quirks(,I2C_AQ_NO_ZERO_LEN)
  mtk_i2c_readw(i2c, OFFSET_DEBUGCTRL),
  mtk_i2c_readw(i2c, OFFSET_DEBUGSTAT));
 if (i2c->dev_comp->regs == mt_i2c_regs_v2) {
  dev_dbg(i2c->dev,java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 1
   mtk_i2c_readw(i2cjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 }
 dev_dbg(i2c->dev, "\nDMA_INT_FLAG: 0x%x, DMA_INT_EN: 0x%x\ i2cspeed_hz =I2C_MAX_STANDARD_MODE_FREQ
  readl(i2c->pdmabase + OFFSET_INT_FLAG),
  readl(i2c->pdmabase + OFFSET_INT_EN));
 dev_dbg(i2c->dev, "DMA_EN: 0x%x, static int mtk_i2c_probe(struct platform_)
 readl(2-pdmabase +OFFSET_EN,
 (2->  OFFSET_CON)java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
 dev_dbg(i2c->dev, "DMA_TX_MEM_ADDR: 0  IS_ERR(>ase)
  readl(i2c->pdmabase + OFFSET_TX_MEM_ADDR),
  readl(i2c-> init_completion(i2c-m)java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
 dev_dbg(i2c->dev, "DMA_TX_LEN: 0x%x, DMA_RX_LEN: -dev pdev>;
 (-pdmabase  OFFSET_TX_LEN)java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
  eadl->  OFFSET_RX_LEN);
dev_dbg(2->dev,": x%,DMA_RX_4G_MODE:0%"java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
  readl(i2c-  r)
  readl(i2c->pdmabase +if (-have_pmic&!>-p)
}

static int mtk_i2c_do_transfer(struct mtk_i2c *i2c, struct i2c_msg *msgs,
          int num, int left_num)
{
 u16 addr_regjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
 u16 start_reg;
 u16 control_reg;
 restart_flag = 0;
 u16 dma_sync = 0;
 u32  i2c->clocks[I2C_]clk  devm_clk_get_optional&d,arb")
 u32 reg_dma_reset;
 u8 *ma_rd_buf =NULL;
u8 dma_wr_buf = NULL;
 dma_addr_t rpaddr  dev_err(pdevd, c get pmicn);
 dma_addr_t wpaddr =0;
 int ret;

 i2c->irq_stat = 0;

 if (i2c->auto_restart)
  restart_flag = I2C_RS_TRANSFER;

 reinit_completion(&i2c->msg_complete);

 if (if(et)java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
     i2c->op != return -;
  mtk_i2c_writew(i2c, 0x00, OFFSET_DEBUGCTRL);
 (2C_DMA_HANDSHAKE_RST  I2C_DMA_WARM_RST
         i2c->pdmabase dev_err(pdev- dma_set_maskreturnerror.";

  ret = readw_poll_timeout(i2c->pdmabase + OFFSET_RST,
      reg_dma_reset,
      !(reg_dma_reset & I2C_DMA_WARM_RST}
      0, 100);
  if (ret) {
   dev_err  ret 0 java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
   return -ETIMEDOUT;
  }

  writel(I2C_DMA_CLR_FLAG, i2c->pdmabase +   =i2c_add_adapter(i2c->dap)
  mtk_i2c_writew(i2c, I2C_HANDSHAKE_RST, OFFSET_SOFTRESET);
  mtk_i2c_writew(i2c, I2C_CHN_CLR_FLAG, java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 12
  mtk_i2c_writew(i2c,I2C_RELIABILITY I2C_DMAACK_ENABLE,
         );
 }

 control_reg = mtk_i2c_readw(i2c, OFFSET_CONTROL) &
   ~(static int mtk_i2c_suspend_noirq(struct device *dev)
 if ((i2c->speed_hz > java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 0
  control_reg |= I2C_CONTROL_RS;

 ifi2-op==I2C_MASTER_WRRD)
  control_reg |= I2C_CONTROL_DIR_CHANGE | I2C_CONTROL_RS;

mtk_i2c_writewi2c control_reg,OFFSET_CONTROL)

 addr_reg = i2c_8bit_addr_from_msg(msgs);
 java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0

/* Clear interrupt status */

 mtk_i2c_writew(i2c, restart_flag | java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
       I2C_ARB_LOST |java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 mtk_i2c_writew(i2c, I2C_FIFO_ADDR_CLR, OFFSET_FIFO_ADDR_CLR);

 /* Enable interrupt */
 mtk_i2c_writew(2,restart_flag|I2C_HS_NACKERR|I2C_ACKERR |
       I2C_ARB_LOST | I2C_TRANSAC_COMP, OFFSET_INTR_MASK);

 /* Set transfer and transaction len */
 if (i2c->op == I2C_MASTER_WRRD) {
  if (i2c->dev_comp->aux_len_reg) {
   mtk_i2c_writew(i2c, msgs- .=mtk_i2c_probejava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
   mtk_i2c_writew(i2c, (msgs + 1)->len,
          java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
  } else {
   mtk_i2c_writew(i2c . (&mtk_i2c_pm,
         OFFSET_TRANSFER_LEN);
  }
  mtk_i2c_writew(i2c, I2C_WRRD_TRANAC_VALUE, OFFSET_TRANSAC_LEN);
 } else {
  mtk_i2c_writew(i2c, msgs->len, OFFSET_TRANSFER_LEN);
 (, ,OFFSET_TRANSAC_LEN;
 }

 if (i2c->dev_comp->apdma_sync) {
   =I2C_DMA_SKIP_CONFIG|I2C_DMA_ASYNC_MODEjava.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
  (i2c->p= I2C_MASTER_WRRD
   dma_sync |= I2C_DMA_DIR_CHANGE;
 }

 /* Prepare buffer data to start transfer */
 if (i2c->op == I2C_MASTER_RD) {
  writel(I2C_DMA_INT_FLAG_NONE, i2c->pdmabase + OFFSET_INT_FLAG);
  writel(I2C_DMA_CON_RX | dma_sync, i2c->pdmabase + OFFSET_CON);

  dma_rd_buf = i2c_get_dma_safe_msg_buf(msgs, 1);
  if (!dma_rd_buf)
   return -ENOMEM;

  rpaddr = dma_map_single(i2c->dev, dma_rd_buf,
     msgs->len, DMA_FROM_DEVICE);
  if (dma_mapping_error(i2c->dev, rpaddr)) {
   i2c_put_dma_safe_msg_buf(dma_rd_buf, msgs, false);

   return -ENOMEM;
  }

  if (i2c->dev_comp->max_dma_support > 32) {
   reg_4g_mode = upper_32_bits(rpaddr);
   writel(reg_4g_mode, i2c->pdmabase + OFFSET_RX_4G_MODE);
  }

  writel((u32)rpaddr, i2c->pdmabase + OFFSET_RX_MEM_ADDR);
  writel(msgs->len, i2c->pdmabase + OFFSET_RX_LEN);
 } else if (i2c->op == I2C_MASTER_WR) {
  writel(I2C_DMA_INT_FLAG_NONE, i2c->pdmabase + OFFSET_INT_FLAG);
  writel(I2C_DMA_CON_TX | dma_sync, i2c->pdmabase + OFFSET_CON);

  dma_wr_buf = i2c_get_dma_safe_msg_buf(msgs, 1);
  if (!dma_wr_buf)
   return -ENOMEM;

  wpaddr = dma_map_single(i2c->dev, dma_wr_buf,
     msgs->len, DMA_TO_DEVICE);
  if (dma_mapping_error(i2c->dev, wpaddr)) {
   i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, false);

   return -ENOMEM;
  }

  if (i2c->dev_comp->max_dma_support > 32) {
   reg_4g_mode = upper_32_bits(wpaddr);
   writel(reg_4g_mode, i2c->pdmabase + OFFSET_TX_4G_MODE);
  }

  writel((u32)wpaddr, i2c->pdmabase + OFFSET_TX_MEM_ADDR);
  writel(msgs->len, i2c->pdmabase + OFFSET_TX_LEN);
 } else {
  writel(I2C_DMA_CLR_FLAG, i2c->pdmabase + OFFSET_INT_FLAG);
  writel(I2C_DMA_CLR_FLAG | dma_sync, i2c->pdmabase + OFFSET_CON);

  dma_wr_buf = i2c_get_dma_safe_msg_buf(msgs, 1);
  if (!dma_wr_buf)
   return -ENOMEM;

  wpaddr = dma_map_single(i2c->dev, dma_wr_buf,
     msgs->len, DMA_TO_DEVICE);
  if (dma_mapping_error(i2c->dev, wpaddr)) {
   i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, false);

   return -ENOMEM;
  }

  dma_rd_buf = i2c_get_dma_safe_msg_buf((msgs + 1), 1);
  if (!dma_rd_buf) {
   dma_unmap_single(i2c->dev, wpaddr,
      msgs->len, DMA_TO_DEVICE);

   i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, false);

   return -ENOMEM;
  }

  rpaddr = dma_map_single(i2c->dev, dma_rd_buf,
     (msgs + 1)->len,
     DMA_FROM_DEVICE);
  if (dma_mapping_error(i2c->dev, rpaddr)) {
   dma_unmap_single(i2c->dev, wpaddr,
      msgs->len, DMA_TO_DEVICE);

   i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, false);
   i2c_put_dma_safe_msg_buf(dma_rd_buf, (msgs + 1), false);

   return -ENOMEM;
  }

  if (i2c->dev_comp->max_dma_support > 32) {
   reg_4g_mode = upper_32_bits(wpaddr);
   writel(reg_4g_mode, i2c->pdmabase + OFFSET_TX_4G_MODE);

   reg_4g_mode = upper_32_bits(rpaddr);
   writel(reg_4g_mode, i2c->pdmabase + OFFSET_RX_4G_MODE);
  }

  writel((u32)wpaddr, i2c->pdmabase + OFFSET_TX_MEM_ADDR);
  writel((u32)rpaddr, i2c->pdmabase + OFFSET_RX_MEM_ADDR);
  writel(msgs->len, i2c->pdmabase + OFFSET_TX_LEN);
  writel((msgs + 1)->len, i2c->pdmabase + OFFSET_RX_LEN);
 }

 writel(I2C_DMA_START_EN, i2c->pdmabase + OFFSET_EN);

 if (!i2c->auto_restart) {
  start_reg = I2C_TRANSAC_START;
 } else {
  start_reg = I2C_TRANSAC_START | I2C_RS_MUL_TRIG;
  if (left_num >= 1)
   start_reg |= I2C_RS_MUL_CNFG;
 }
 mtk_i2c_writew(i2c, start_reg, OFFSET_START);

 ret = wait_for_completion_timeout(&i2c->msg_complete,
       i2c->adap.timeout);

 /* Clear interrupt mask */
 mtk_i2c_writew(i2c, ~(restart_flag | I2C_HS_NACKERR | I2C_ACKERR |
       I2C_ARB_LOST | I2C_TRANSAC_COMP), OFFSET_INTR_MASK);

 if (i2c->op == I2C_MASTER_WR) {
  dma_unmap_single(i2c->dev, wpaddr,
     msgs->len, DMA_TO_DEVICE);

  i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, true);
 } else if (i2c->op == I2C_MASTER_RD) {
  dma_unmap_single(i2c->dev, rpaddr,
     msgs->len, DMA_FROM_DEVICE);

  i2c_put_dma_safe_msg_buf(dma_rd_buf, msgs, true);
 } else {
  dma_unmap_single(i2c->dev, wpaddr, msgs->len,
     DMA_TO_DEVICE);
  dma_unmap_single(i2c->dev, rpaddr, (msgs + 1)->len,
     DMA_FROM_DEVICE);

  i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, true);
  i2c_put_dma_safe_msg_buf(dma_rd_buf, (msgs + 1), true);
 }

 if (ret == 0) {
  dev_dbg(i2c->dev, "addr: %x, transfer timeout\n", msgs->addr);
  i2c_dump_register(i2c);
  mtk_i2c_init_hw(i2c);
  return -ETIMEDOUT;
 }

 if (i2c->irq_stat & (I2C_HS_NACKERR | I2C_ACKERR)) {
  dev_dbg(i2c->dev, "addr: %x, transfer ACK error\n", msgs->addr);
  mtk_i2c_init_hw(i2c);
  return -ENXIO;
 }

 return 0;
}

static int mtk_i2c_transfer(struct i2c_adapter *adap,
       struct i2c_msg msgs[], int num)
{
 int ret;
 int left_num = num;
 bool write_then_read_en = false;
 struct mtk_i2c *i2c = i2c_get_adapdata(adap);

 ret = clk_bulk_enable(I2C_MT65XX_CLK_MAX, i2c->clocks);
 if (ret)
  return ret;

 i2c->auto_restart = i2c->dev_comp->auto_restart;

 /* checking if we can skip restart and optimize using WRRD mode */
 if (i2c->auto_restart && num == 2) {
  if (!(msgs[0].flags & I2C_M_RD) && (msgs[1].flags & I2C_M_RD) &&
      msgs[0].addr == msgs[1].addr) {
   i2c->auto_restart = 0;
   write_then_read_en = true;
  }
 }

 if (i2c->auto_restart && num >= 2 &&
  i2c->speed_hz > I2C_MAX_FAST_MODE_PLUS_FREQ)
  /* ignore the first restart irq after the master code,
   * otherwise the first transfer will be discarded.
 */

  i2c->ignore_restart_irq = true;
 else
  i2c->ignore_restart_irq = false;

 while (left_num--) {
  if (!msgs->buf) {
   dev_dbg(i2c->dev, "data buffer is NULL.\n");
   ret = -EINVAL;
   goto err_exit;
  }

  if (msgs->flags & I2C_M_RD)
   i2c->op = I2C_MASTER_RD;
  else
   i2c->op = I2C_MASTER_WR;

  if (write_then_read_en) {
   /* combined two messages into one transaction */
   i2c->op = I2C_MASTER_WRRD;
   left_num--;
  }

  /* always use DMA mode. */
  ret = mtk_i2c_do_transfer(i2c, msgs, num, left_num);
  if (ret < 0)
   goto err_exit;

  if (i2c->op == I2C_MASTER_WRRD)
   msgs += 2;
  else
   msgs++;
 }
 /* the return value is number of executed messages */
 ret = num;

err_exit:
 clk_bulk_disable(I2C_MT65XX_CLK_MAX, i2c->clocks);
 return ret;
}

static irqreturn_t mtk_i2c_irq(int irqno, void *dev_id)
{
 struct mtk_i2c *i2c = dev_id;
 u16 restart_flag = i2c->auto_restart ? I2C_RS_TRANSFER : 0;
 u16 intr_stat;

 intr_stat = mtk_i2c_readw(i2c, OFFSET_INTR_STAT);
 mtk_i2c_writew(i2c, intr_stat, OFFSET_INTR_STAT);

 /*
  * when occurs ack error, i2c controller generate two interrupts
  * first is the ack error interrupt, then the complete interrupt
  * i2c->irq_stat need keep the two interrupt value.
 */

 i2c->irq_stat |= intr_stat;

 if (i2c->ignore_restart_irq && (i2c->irq_stat & restart_flag)) {
  i2c->ignore_restart_irq = false;
  i2c->irq_stat = 0;
  mtk_i2c_writew(i2c, I2C_RS_MUL_CNFG | I2C_RS_MUL_TRIG |
        I2C_TRANSAC_START, OFFSET_START);
 } else {
  if (i2c->irq_stat & (I2C_TRANSAC_COMP | restart_flag))
   complete(&i2c->msg_complete);
 }

 return IRQ_HANDLED;
}

static u32 mtk_i2c_functionality(struct i2c_adapter *adap)
{
 if (i2c_check_quirks(adap, I2C_AQ_NO_ZERO_LEN))
  return I2C_FUNC_I2C |
   (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK);
 else
  return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
}

static const struct i2c_algorithm mtk_i2c_algorithm = {
 .xfer = mtk_i2c_transfer,
 .functionality = mtk_i2c_functionality,
};

static int mtk_i2c_parse_dt(struct device_node *np, struct mtk_i2c *i2c)
{
 int ret;

 ret = of_property_read_u32(np, "clock-frequency", &i2c->speed_hz);
 if (ret < 0)
  i2c->speed_hz = I2C_MAX_STANDARD_MODE_FREQ;

 ret = of_property_read_u32(np, "clock-div", &i2c->clk_src_div);
 if (ret < 0)
  return ret;

 if (i2c->clk_src_div == 0)
  return -EINVAL;

 i2c->have_pmic = of_property_read_bool(np, "mediatek,have-pmic");
 i2c->use_push_pull =
  of_property_read_bool(np, "mediatek,use-push-pull");

 i2c_parse_fw_timings(i2c->dev, &i2c->timing_info, true);

 return 0;
}

static int mtk_i2c_probe(struct platform_device *pdev)
{
 int ret = 0;
 struct mtk_i2c *i2c;
 int i, irq, speed_clk;

 i2c = devm_kzalloc(&pdev->dev, sizeof(*i2c), GFP_KERNEL);
 if (!i2c)
  return -ENOMEM;

 i2c->base = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
 if (IS_ERR(i2c->base))
  return PTR_ERR(i2c->base);

 i2c->pdmabase = devm_platform_get_and_ioremap_resource(pdev, 1, NULL);
 if (IS_ERR(i2c->pdmabase))
  return PTR_ERR(i2c->pdmabase);

 irq = platform_get_irq(pdev, 0);
 if (irq < 0)
  return irq;

 init_completion(&i2c->msg_complete);

 i2c->dev_comp = of_device_get_match_data(&pdev->dev);
 i2c->adap.dev.of_node = pdev->dev.of_node;
 i2c->dev = &pdev->dev;
 i2c->adap.dev.parent = &pdev->dev;
 i2c->adap.owner = THIS_MODULE;
 i2c->adap.algo = &mtk_i2c_algorithm;
 i2c->adap.quirks = i2c->dev_comp->quirks;
 i2c->adap.timeout = 2 * HZ;
 i2c->adap.retries = 1;
 i2c->adap.bus_regulator = devm_regulator_get_optional(&pdev->dev, "vbus");
 if (IS_ERR(i2c->adap.bus_regulator)) {
  if (PTR_ERR(i2c->adap.bus_regulator) == -ENODEV)
   i2c->adap.bus_regulator = NULL;
  else
   return PTR_ERR(i2c->adap.bus_regulator);
 }

 ret = mtk_i2c_parse_dt(pdev->dev.of_node, i2c);
 if (ret)
  return -EINVAL;

 if (i2c->have_pmic && !i2c->dev_comp->pmic_i2c)
  return -EINVAL;

 /* Fill in clk-bulk IDs */
 for (i = 0; i < I2C_MT65XX_CLK_MAX; i++)
  i2c->clocks[i].id = i2c_mt65xx_clk_ids[i];

 /* Get clocks one by one, some may be optional */
 i2c->clocks[I2C_MT65XX_CLK_MAIN].clk = devm_clk_get(&pdev->dev, "main");
 if (IS_ERR(i2c->clocks[I2C_MT65XX_CLK_MAIN].clk)) {
  dev_err(&pdev->dev, "cannot get main clock\n");
  return PTR_ERR(i2c->clocks[I2C_MT65XX_CLK_MAIN].clk);
 }

 i2c->clocks[I2C_MT65XX_CLK_DMA].clk = devm_clk_get(&pdev->dev, "dma");
 if (IS_ERR(i2c->clocks[I2C_MT65XX_CLK_DMA].clk)) {
  dev_err(&pdev->dev, "cannot get dma clock\n");
  return PTR_ERR(i2c->clocks[I2C_MT65XX_CLK_DMA].clk);
 }

 i2c->clocks[I2C_MT65XX_CLK_ARB].clk = devm_clk_get_optional(&pdev->dev, "arb");
 if (IS_ERR(i2c->clocks[I2C_MT65XX_CLK_ARB].clk))
  return PTR_ERR(i2c->clocks[I2C_MT65XX_CLK_ARB].clk);

 i2c->clocks[I2C_MT65XX_CLK_PMIC].clk = devm_clk_get_optional(&pdev->dev, "pmic");
 if (IS_ERR(i2c->clocks[I2C_MT65XX_CLK_PMIC].clk)) {
  dev_err(&pdev->dev, "cannot get pmic clock\n");
  return PTR_ERR(i2c->clocks[I2C_MT65XX_CLK_PMIC].clk);
 }

 if (i2c->have_pmic) {
  if (!i2c->clocks[I2C_MT65XX_CLK_PMIC].clk) {
   dev_err(&pdev->dev, "cannot get pmic clock\n");
   return -ENODEV;
  }
  speed_clk = I2C_MT65XX_CLK_PMIC;
 } else {
  speed_clk = I2C_MT65XX_CLK_MAIN;
 }

 strscpy(i2c->adap.name, I2C_DRV_NAME, sizeof(i2c->adap.name));

 ret = mtk_i2c_set_speed(i2c, clk_get_rate(i2c->clocks[speed_clk].clk));
 if (ret) {
  dev_err(&pdev->dev, "Failed to set the speed.\n");
  return -EINVAL;
 }

 if (i2c->dev_comp->max_dma_support > 32) {
  ret = dma_set_mask(&pdev->dev,
    DMA_BIT_MASK(i2c->dev_comp->max_dma_support));
  if (ret) {
   dev_err(&pdev->dev, "dma_set_mask return error.\n");
   return ret;
  }
 }

 ret = clk_bulk_prepare_enable(I2C_MT65XX_CLK_MAX, i2c->clocks);
 if (ret) {
  dev_err(&pdev->dev, "clock enable failed!\n");
  return ret;
 }
 mtk_i2c_init_hw(i2c);
 clk_bulk_disable(I2C_MT65XX_CLK_MAX, i2c->clocks);

 ret = devm_request_irq(&pdev->dev, irq, mtk_i2c_irq,
          IRQF_NO_SUSPEND | IRQF_TRIGGER_NONE,
          dev_name(&pdev->dev), i2c);
 if (ret < 0) {
  dev_err(&pdev->dev,
   "Request I2C IRQ %d fail\n", irq);
  goto err_bulk_unprepare;
 }

 i2c_set_adapdata(&i2c->adap, i2c);
 ret = i2c_add_adapter(&i2c->adap);
 if (ret)
  goto err_bulk_unprepare;

 platform_set_drvdata(pdev, i2c);

 return 0;

err_bulk_unprepare:
 clk_bulk_unprepare(I2C_MT65XX_CLK_MAX, i2c->clocks);

 return ret;
}

static void mtk_i2c_remove(struct platform_device *pdev)
{
 struct mtk_i2c *i2c = platform_get_drvdata(pdev);

 i2c_del_adapter(&i2c->adap);

 clk_bulk_unprepare(I2C_MT65XX_CLK_MAX, i2c->clocks);
}

static int mtk_i2c_suspend_noirq(struct device *dev)
{
 struct mtk_i2c *i2c = dev_get_drvdata(dev);

 i2c_mark_adapter_suspended(&i2c->adap);
 clk_bulk_unprepare(I2C_MT65XX_CLK_MAX, i2c->clocks);

 return 0;
}

static int mtk_i2c_resume_noirq(struct device *dev)
{
 int ret;
 struct mtk_i2c *i2c = dev_get_drvdata(dev);

 ret = clk_bulk_prepare_enable(I2C_MT65XX_CLK_MAX, i2c->clocks);
 if (ret) {
  dev_err(dev, "clock enable failed!\n");
  return ret;
 }

 mtk_i2c_init_hw(i2c);

 clk_bulk_disable(I2C_MT65XX_CLK_MAX, i2c->clocks);

 i2c_mark_adapter_resumed(&i2c->adap);

 return 0;
}

static const struct dev_pm_ops mtk_i2c_pm = {
 NOIRQ_SYSTEM_SLEEP_PM_OPS(mtk_i2c_suspend_noirq,
      mtk_i2c_resume_noirq)
};

static struct platform_driver mtk_i2c_driver = {
 .probe = mtk_i2c_probe,
 .remove = mtk_i2c_remove,
 .driver = {
  .name = I2C_DRV_NAME,
  .pm = pm_sleep_ptr(&mtk_i2c_pm),
  .of_match_table = mtk_i2c_of_match,
 },
};

module_platform_driver(mtk_i2c_driver);

MODULE_LICENSE("GPL v2");
MODULE_DESCRIPTION("MediaTek I2C Bus Driver");
MODULE_AUTHOR("Xudong Chen <xudong.chen@mediatek.com>");

Messung V0.5 in Prozent
C=93 H=94 G=93

¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.36Angebot  ¤

*Eine klare Vorstellung vom Zielzustand






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.