Skip to content

Commit

Permalink
i2c: mediatek: Add i2c and apdma sync in i2c driver
Browse files Browse the repository at this point in the history
When i2c and apdma use different source clocks, we should enable
synchronization between them.

Signed-off-by: Qii Wang <qii.wang@mediatek.com>
Reviewed-by: Nicolas Boichat <drinkcat@chromium.org>
Reviewed-by: Matthias Brugger <matthias.bgg@gmail.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
  • Loading branch information
Qii Wang authored and Wolfram Sang committed Apr 15, 2019
1 parent cad6dc5 commit a15c91b
Showing 1 changed file with 11 additions and 0 deletions.
11 changes: 11 additions & 0 deletions drivers/i2c/busses/i2c-mt65xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@
#define I2C_CONTROL_DIR_CHANGE (0x1 << 4)
#define I2C_CONTROL_ACKERR_DET_EN (0x1 << 5)
#define I2C_CONTROL_TRANSFER_LEN_CHANGE (0x1 << 6)
#define I2C_CONTROL_DMAACK_EN (0x1 << 8)
#define I2C_CONTROL_ASYNC_MODE (0x1 << 9)
#define I2C_CONTROL_WRAPPER (0x1 << 0)

#define I2C_DRV_NAME "i2c-mt65xx"
Expand Down Expand Up @@ -169,6 +171,7 @@ struct mtk_i2c_compatible {
unsigned char aux_len_reg: 1;
unsigned char support_33bits: 1;
unsigned char timing_adjust: 1;
unsigned char dma_sync: 1;
};

struct mtk_i2c {
Expand Down Expand Up @@ -218,6 +221,7 @@ static const struct mtk_i2c_compatible mt2712_compat = {
.aux_len_reg = 1,
.support_33bits = 1,
.timing_adjust = 1,
.dma_sync = 0,
};

static const struct mtk_i2c_compatible mt6577_compat = {
Expand All @@ -229,6 +233,7 @@ static const struct mtk_i2c_compatible mt6577_compat = {
.aux_len_reg = 0,
.support_33bits = 0,
.timing_adjust = 0,
.dma_sync = 0,
};

static const struct mtk_i2c_compatible mt6589_compat = {
Expand All @@ -240,6 +245,7 @@ static const struct mtk_i2c_compatible mt6589_compat = {
.aux_len_reg = 0,
.support_33bits = 0,
.timing_adjust = 0,
.dma_sync = 0,
};

static const struct mtk_i2c_compatible mt7622_compat = {
Expand All @@ -251,6 +257,7 @@ static const struct mtk_i2c_compatible mt7622_compat = {
.aux_len_reg = 1,
.support_33bits = 0,
.timing_adjust = 0,
.dma_sync = 0,
};

static const struct mtk_i2c_compatible mt8173_compat = {
Expand All @@ -261,6 +268,7 @@ static const struct mtk_i2c_compatible mt8173_compat = {
.aux_len_reg = 1,
.support_33bits = 1,
.timing_adjust = 0,
.dma_sync = 0,
};

static const struct of_device_id mtk_i2c_of_match[] = {
Expand Down Expand Up @@ -360,6 +368,9 @@ static void mtk_i2c_init_hw(struct mtk_i2c *i2c)

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

mtk_i2c_writew(i2c, control_reg, OFFSET_CONTROL);
mtk_i2c_writew(i2c, I2C_DELAY_LEN, OFFSET_DELAY_LEN);

Expand Down

0 comments on commit a15c91b

Please sign in to comment.