aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx18/cx18-i2c.c
diff options
context:
space:
mode:
authorAndy Walls <awalls@radix.net>2008-11-16 21:33:41 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2008-12-30 06:38:09 -0500
commit3f75c6161f28e6a17c547daf552c1127c805c5e7 (patch)
tree1e4db5013c05946832221bfdca743720091f6582 /drivers/media/video/cx18/cx18-i2c.c
parent72a4f8081af1c53a1673c173ce0fdd85c4b7d403 (diff)
V4L/DVB (9724): cx18: Streamline cx18-io[ch] wrappers and enforce MMIO retry strategy
cx18: Streamline cx18-io[ch] wrappers and enforce MMIO retry strategy so that write retries always occur and read retries never occur (as they never help). Remove MMIO statistics logging to speed up MMIO accesses. Deprecate & ignore retry_mmio and mmio_ndelay module parameters, to essentially force retry_mmio=1 and mmio_ndelay=0. Signed-off-by: Andy Walls <awalls@radix.net> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/cx18/cx18-i2c.c')
-rw-r--r--drivers/media/video/cx18/cx18-i2c.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/drivers/media/video/cx18/cx18-i2c.c b/drivers/media/video/cx18/cx18-i2c.c
index 824efbecb34c..098635072543 100644
--- a/drivers/media/video/cx18/cx18-i2c.c
+++ b/drivers/media/video/cx18/cx18-i2c.c
@@ -161,9 +161,9 @@ static void cx18_setscl(void *data, int state)
161 u32 r = cx18_read_reg(cx, addr); 161 u32 r = cx18_read_reg(cx, addr);
162 162
163 if (state) 163 if (state)
164 cx18_write_reg_sync(cx, r | SETSCL_BIT, addr); 164 cx18_write_reg(cx, r | SETSCL_BIT, addr);
165 else 165 else
166 cx18_write_reg_sync(cx, r & ~SETSCL_BIT, addr); 166 cx18_write_reg(cx, r & ~SETSCL_BIT, addr);
167} 167}
168 168
169static void cx18_setsda(void *data, int state) 169static void cx18_setsda(void *data, int state)
@@ -174,9 +174,9 @@ static void cx18_setsda(void *data, int state)
174 u32 r = cx18_read_reg(cx, addr); 174 u32 r = cx18_read_reg(cx, addr);
175 175
176 if (state) 176 if (state)
177 cx18_write_reg_sync(cx, r | SETSDL_BIT, addr); 177 cx18_write_reg(cx, r | SETSDL_BIT, addr);
178 else 178 else
179 cx18_write_reg_sync(cx, r & ~SETSDL_BIT, addr); 179 cx18_write_reg(cx, r & ~SETSDL_BIT, addr);
180} 180}
181 181
182static int cx18_getscl(void *data) 182static int cx18_getscl(void *data)
@@ -405,16 +405,10 @@ int init_cx18_i2c(struct cx18 *cx)
405 } 405 }
406 /* courtesy of Steven Toth <stoth@hauppauge.com> */ 406 /* courtesy of Steven Toth <stoth@hauppauge.com> */
407 cx18_write_reg_expect(cx, 0x00c00000, 0xc7001c, 0x00000000, 0x00c000c0); 407 cx18_write_reg_expect(cx, 0x00c00000, 0xc7001c, 0x00000000, 0x00c000c0);
408 if (!cx18_retry_mmio)
409 (void) cx18_read_reg(cx, 0xc7001c); /* sync */
410 mdelay(10); 408 mdelay(10);
411 cx18_write_reg_expect(cx, 0x00c000c0, 0xc7001c, 0x000000c0, 0x00c000c0); 409 cx18_write_reg_expect(cx, 0x00c000c0, 0xc7001c, 0x000000c0, 0x00c000c0);
412 if (!cx18_retry_mmio)
413 (void) cx18_read_reg(cx, 0xc7001c); /* sync */
414 mdelay(10); 410 mdelay(10);
415 cx18_write_reg_expect(cx, 0x00c00000, 0xc7001c, 0x00000000, 0x00c000c0); 411 cx18_write_reg_expect(cx, 0x00c00000, 0xc7001c, 0x00000000, 0x00c000c0);
416 if (!cx18_retry_mmio)
417 (void) cx18_read_reg(cx, 0xc7001c); /* sync */
418 mdelay(10); 412 mdelay(10);
419 413
420 /* Set to edge-triggered intrs. */ 414 /* Set to edge-triggered intrs. */
@@ -424,12 +418,12 @@ int init_cx18_i2c(struct cx18 *cx)
424 ~(HW2_I2C1_INT|HW2_I2C2_INT), HW2_I2C1_INT|HW2_I2C2_INT); 418 ~(HW2_I2C1_INT|HW2_I2C2_INT), HW2_I2C1_INT|HW2_I2C2_INT);
425 419
426 /* Hw I2C1 Clock Freq ~100kHz */ 420 /* Hw I2C1 Clock Freq ~100kHz */
427 cx18_write_reg_sync(cx, 0x00021c0f & ~4, CX18_REG_I2C_1_WR); 421 cx18_write_reg(cx, 0x00021c0f & ~4, CX18_REG_I2C_1_WR);
428 cx18_setscl(&cx->i2c_algo_cb_data[0], 1); 422 cx18_setscl(&cx->i2c_algo_cb_data[0], 1);
429 cx18_setsda(&cx->i2c_algo_cb_data[0], 1); 423 cx18_setsda(&cx->i2c_algo_cb_data[0], 1);
430 424
431 /* Hw I2C2 Clock Freq ~100kHz */ 425 /* Hw I2C2 Clock Freq ~100kHz */
432 cx18_write_reg_sync(cx, 0x00021c0f & ~4, CX18_REG_I2C_2_WR); 426 cx18_write_reg(cx, 0x00021c0f & ~4, CX18_REG_I2C_2_WR);
433 cx18_setscl(&cx->i2c_algo_cb_data[1], 1); 427 cx18_setscl(&cx->i2c_algo_cb_data[1], 1);
434 cx18_setsda(&cx->i2c_algo_cb_data[1], 1); 428 cx18_setsda(&cx->i2c_algo_cb_data[1], 1);
435 429