diff options
Diffstat (limited to 'drivers/i2c')
-rw-r--r-- | drivers/i2c/busses/scx200_acb.c | 7 | ||||
-rw-r--r-- | drivers/i2c/chips/tps65010.c | 12 |
2 files changed, 11 insertions, 8 deletions
diff --git a/drivers/i2c/busses/scx200_acb.c b/drivers/i2c/busses/scx200_acb.c index ced309ff056f..eae9e81be375 100644 --- a/drivers/i2c/busses/scx200_acb.c +++ b/drivers/i2c/busses/scx200_acb.c | |||
@@ -232,7 +232,7 @@ static void scx200_acb_poll(struct scx200_acb_iface *iface) | |||
232 | unsigned long timeout; | 232 | unsigned long timeout; |
233 | 233 | ||
234 | timeout = jiffies + POLL_TIMEOUT; | 234 | timeout = jiffies + POLL_TIMEOUT; |
235 | while (time_before(jiffies, timeout)) { | 235 | while (1) { |
236 | status = inb(ACBST); | 236 | status = inb(ACBST); |
237 | 237 | ||
238 | /* Reset the status register to avoid the hang */ | 238 | /* Reset the status register to avoid the hang */ |
@@ -242,7 +242,10 @@ static void scx200_acb_poll(struct scx200_acb_iface *iface) | |||
242 | scx200_acb_machine(iface, status); | 242 | scx200_acb_machine(iface, status); |
243 | return; | 243 | return; |
244 | } | 244 | } |
245 | yield(); | 245 | if (time_after(jiffies, timeout)) |
246 | break; | ||
247 | cpu_relax(); | ||
248 | cond_resched(); | ||
246 | } | 249 | } |
247 | 250 | ||
248 | dev_err(&iface->adapter.dev, "timeout in state %s\n", | 251 | dev_err(&iface->adapter.dev, "timeout in state %s\n", |
diff --git a/drivers/i2c/chips/tps65010.c b/drivers/i2c/chips/tps65010.c index e7e27049fbfa..0be6fd6a267d 100644 --- a/drivers/i2c/chips/tps65010.c +++ b/drivers/i2c/chips/tps65010.c | |||
@@ -43,13 +43,12 @@ | |||
43 | /*-------------------------------------------------------------------------*/ | 43 | /*-------------------------------------------------------------------------*/ |
44 | 44 | ||
45 | #define DRIVER_VERSION "2 May 2005" | 45 | #define DRIVER_VERSION "2 May 2005" |
46 | #define DRIVER_NAME (tps65010_driver.name) | 46 | #define DRIVER_NAME (tps65010_driver.driver.name) |
47 | 47 | ||
48 | MODULE_DESCRIPTION("TPS6501x Power Management Driver"); | 48 | MODULE_DESCRIPTION("TPS6501x Power Management Driver"); |
49 | MODULE_LICENSE("GPL"); | 49 | MODULE_LICENSE("GPL"); |
50 | 50 | ||
51 | static unsigned short normal_i2c[] = { 0x48, /* 0x49, */ I2C_CLIENT_END }; | 51 | static unsigned short normal_i2c[] = { 0x48, /* 0x49, */ I2C_CLIENT_END }; |
52 | static unsigned short normal_i2c_range[] = { I2C_CLIENT_END }; | ||
53 | 52 | ||
54 | I2C_CLIENT_INSMOD; | 53 | I2C_CLIENT_INSMOD; |
55 | 54 | ||
@@ -100,7 +99,7 @@ struct tps65010 { | |||
100 | /* not currently tracking GPIO state */ | 99 | /* not currently tracking GPIO state */ |
101 | }; | 100 | }; |
102 | 101 | ||
103 | #define POWER_POLL_DELAY msecs_to_jiffies(800) | 102 | #define POWER_POLL_DELAY msecs_to_jiffies(5000) |
104 | 103 | ||
105 | /*-------------------------------------------------------------------------*/ | 104 | /*-------------------------------------------------------------------------*/ |
106 | 105 | ||
@@ -520,8 +519,11 @@ tps65010_probe(struct i2c_adapter *bus, int address, int kind) | |||
520 | goto fail1; | 519 | goto fail1; |
521 | } | 520 | } |
522 | 521 | ||
522 | /* the IRQ is active low, but many gpio lines can't support that | ||
523 | * so this driver can use falling-edge triggers instead. | ||
524 | */ | ||
525 | irqflags = IRQF_SAMPLE_RANDOM; | ||
523 | #ifdef CONFIG_ARM | 526 | #ifdef CONFIG_ARM |
524 | irqflags = IRQF_SAMPLE_RANDOM | IRQF_TRIGGER_LOW; | ||
525 | if (machine_is_omap_h2()) { | 527 | if (machine_is_omap_h2()) { |
526 | tps->model = TPS65010; | 528 | tps->model = TPS65010; |
527 | omap_cfg_reg(W4_GPIO58); | 529 | omap_cfg_reg(W4_GPIO58); |
@@ -543,8 +545,6 @@ tps65010_probe(struct i2c_adapter *bus, int address, int kind) | |||
543 | 545 | ||
544 | // FIXME set up this board's IRQ ... | 546 | // FIXME set up this board's IRQ ... |
545 | } | 547 | } |
546 | #else | ||
547 | irqflags = IRQF_SAMPLE_RANDOM; | ||
548 | #endif | 548 | #endif |
549 | 549 | ||
550 | if (tps->irq > 0) { | 550 | if (tps->irq > 0) { |