aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/i2c/busses/i2c-mxs.c94
1 files changed, 55 insertions, 39 deletions
diff --git a/drivers/i2c/busses/i2c-mxs.c b/drivers/i2c/busses/i2c-mxs.c
index e55736077d23..22d8ad353409 100644
--- a/drivers/i2c/busses/i2c-mxs.c
+++ b/drivers/i2c/busses/i2c-mxs.c
@@ -93,35 +93,6 @@
93#define MXS_CMD_I2C_READ (MXS_I2C_CTRL0_SEND_NAK_ON_LAST | \ 93#define MXS_CMD_I2C_READ (MXS_I2C_CTRL0_SEND_NAK_ON_LAST | \
94 MXS_I2C_CTRL0_MASTER_MODE) 94 MXS_I2C_CTRL0_MASTER_MODE)
95 95
96struct mxs_i2c_speed_config {
97 uint32_t timing0;
98 uint32_t timing1;
99 uint32_t timing2;
100};
101
102/*
103 * Timing values for the default 24MHz clock supplied into the i2c block.
104 *
105 * The bus can operate at 95kHz or at 400kHz with the following timing
106 * register configurations. The 100kHz mode isn't present because it's
107 * values are not stated in the i.MX233/i.MX28 datasheet. The 95kHz mode
108 * shall be close enough replacement. Therefore when the bus is configured
109 * for 100kHz operation, 95kHz timing settings are actually loaded.
110 *
111 * For details, see i.MX233 [25.4.2 - 25.4.4] and i.MX28 [27.5.2 - 27.5.4].
112 */
113static const struct mxs_i2c_speed_config mxs_i2c_95kHz_config = {
114 .timing0 = 0x00780030,
115 .timing1 = 0x00800030,
116 .timing2 = 0x00300030,
117};
118
119static const struct mxs_i2c_speed_config mxs_i2c_400kHz_config = {
120 .timing0 = 0x000f0007,
121 .timing1 = 0x001f000f,
122 .timing2 = 0x00300030,
123};
124
125/** 96/**
126 * struct mxs_i2c_dev - per device, private MXS-I2C data 97 * struct mxs_i2c_dev - per device, private MXS-I2C data
127 * 98 *
@@ -137,7 +108,9 @@ struct mxs_i2c_dev {
137 struct completion cmd_complete; 108 struct completion cmd_complete;
138 int cmd_err; 109 int cmd_err;
139 struct i2c_adapter adapter; 110 struct i2c_adapter adapter;
140 const struct mxs_i2c_speed_config *speed; 111
112 uint32_t timing0;
113 uint32_t timing1;
141 114
142 /* DMA support components */ 115 /* DMA support components */
143 int dma_channel; 116 int dma_channel;
@@ -153,9 +126,16 @@ static void mxs_i2c_reset(struct mxs_i2c_dev *i2c)
153{ 126{
154 stmp_reset_block(i2c->regs); 127 stmp_reset_block(i2c->regs);
155 128
156 writel(i2c->speed->timing0, i2c->regs + MXS_I2C_TIMING0); 129 /*
157 writel(i2c->speed->timing1, i2c->regs + MXS_I2C_TIMING1); 130 * Configure timing for the I2C block. The I2C TIMING2 register has to
158 writel(i2c->speed->timing2, i2c->regs + MXS_I2C_TIMING2); 131 * be programmed with this particular magic number. The rest is derived
132 * from the XTAL speed and requested I2C speed.
133 *
134 * For details, see i.MX233 [25.4.2 - 25.4.4] and i.MX28 [27.5.2 - 27.5.4].
135 */
136 writel(i2c->timing0, i2c->regs + MXS_I2C_TIMING0);
137 writel(i2c->timing1, i2c->regs + MXS_I2C_TIMING1);
138 writel(0x00300030, i2c->regs + MXS_I2C_TIMING2);
159 139
160 writel(MXS_I2C_IRQ_MASK << 8, i2c->regs + MXS_I2C_CTRL1_SET); 140 writel(MXS_I2C_IRQ_MASK << 8, i2c->regs + MXS_I2C_CTRL1_SET);
161} 141}
@@ -553,6 +533,43 @@ static bool mxs_i2c_dma_filter(struct dma_chan *chan, void *param)
553 return true; 533 return true;
554} 534}
555 535
536static void mxs_i2c_derive_timing(struct mxs_i2c_dev *i2c, int speed)
537{
538 /* The I2C block clock run at 24MHz */
539 const uint32_t clk = 24000000;
540 uint32_t base;
541 uint16_t high_count, low_count, rcv_count, xmit_count;
542 struct device *dev = i2c->dev;
543
544 if (speed > 540000) {
545 dev_warn(dev, "Speed too high (%d Hz), using 540 kHz\n", speed);
546 speed = 540000;
547 } else if (speed < 12000) {
548 dev_warn(dev, "Speed too low (%d Hz), using 12 kHz\n", speed);
549 speed = 12000;
550 }
551
552 /*
553 * The timing derivation algorithm. There is no documentation for this
554 * algorithm available, it was derived by using the scope and fiddling
555 * with constants until the result observed on the scope was good enough
556 * for 20kHz, 50kHz, 100kHz, 200kHz, 300kHz and 400kHz. It should be
557 * possible to assume the algorithm works for other frequencies as well.
558 *
559 * Note it was necessary to cap the frequency on both ends as it's not
560 * possible to configure completely arbitrary frequency for the I2C bus
561 * clock.
562 */
563 base = ((clk / speed) - 38) / 2;
564 high_count = base + 3;
565 low_count = base - 3;
566 rcv_count = (high_count * 3) / 4;
567 xmit_count = low_count / 4;
568
569 i2c->timing0 = (high_count << 16) | rcv_count;
570 i2c->timing1 = (low_count << 16) | xmit_count;
571}
572
556static int mxs_i2c_get_ofdata(struct mxs_i2c_dev *i2c) 573static int mxs_i2c_get_ofdata(struct mxs_i2c_dev *i2c)
557{ 574{
558 uint32_t speed; 575 uint32_t speed;
@@ -572,12 +589,12 @@ static int mxs_i2c_get_ofdata(struct mxs_i2c_dev *i2c)
572 } 589 }
573 590
574 ret = of_property_read_u32(node, "clock-frequency", &speed); 591 ret = of_property_read_u32(node, "clock-frequency", &speed);
575 if (ret) 592 if (ret) {
576 dev_warn(dev, "No I2C speed selected, using 100kHz\n"); 593 dev_warn(dev, "No I2C speed selected, using 100kHz\n");
577 else if (speed == 400000) 594 speed = 100000;
578 i2c->speed = &mxs_i2c_400kHz_config; 595 }
579 else if (speed != 100000) 596
580 dev_warn(dev, "Unsupported I2C speed selected, using 100kHz\n"); 597 mxs_i2c_derive_timing(i2c, speed);
581 598
582 return 0; 599 return 0;
583} 600}
@@ -621,7 +638,6 @@ static int mxs_i2c_probe(struct platform_device *pdev)
621 return err; 638 return err;
622 639
623 i2c->dev = dev; 640 i2c->dev = dev;
624 i2c->speed = &mxs_i2c_95kHz_config;
625 641
626 init_completion(&i2c->cmd_complete); 642 init_completion(&i2c->cmd_complete);
627 643