diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/i2c/busses/Kconfig | 2 | ||||
-rw-r--r-- | drivers/i2c/busses/i2c-mv64xxx.c | 32 |
2 files changed, 18 insertions, 16 deletions
diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig index 8d12b26bb6c6..b61f56b6f311 100644 --- a/drivers/i2c/busses/Kconfig +++ b/drivers/i2c/busses/Kconfig | |||
@@ -643,7 +643,7 @@ config I2C_PCA_ISA | |||
643 | 643 | ||
644 | config I2C_MV64XXX | 644 | config I2C_MV64XXX |
645 | tristate "Marvell mv64xxx I2C Controller" | 645 | tristate "Marvell mv64xxx I2C Controller" |
646 | depends on MV64X60 && EXPERIMENTAL | 646 | depends on (MV64X60 || ARCH_ORION) && EXPERIMENTAL |
647 | help | 647 | help |
648 | If you say yes to this option, support will be included for the | 648 | If you say yes to this option, support will be included for the |
649 | built-in I2C interface on the Marvell 64xxx line of host bridges. | 649 | built-in I2C interface on the Marvell 64xxx line of host bridges. |
diff --git a/drivers/i2c/busses/i2c-mv64xxx.c b/drivers/i2c/busses/i2c-mv64xxx.c index bb7bf68a7fb6..036e6a883e67 100644 --- a/drivers/i2c/busses/i2c-mv64xxx.c +++ b/drivers/i2c/busses/i2c-mv64xxx.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * Driver for the i2c controller on the Marvell line of host bridges for MIPS | 2 | * Driver for the i2c controller on the Marvell line of host bridges |
3 | * and PPC (e.g, gt642[46]0, mv643[46]0, mv644[46]0). | 3 | * (e.g, gt642[46]0, mv643[46]0, mv644[46]0, and Orion SoC family). |
4 | * | 4 | * |
5 | * Author: Mark A. Greer <mgreer@mvista.com> | 5 | * Author: Mark A. Greer <mgreer@mvista.com> |
6 | * | 6 | * |
@@ -14,7 +14,7 @@ | |||
14 | #include <linux/spinlock.h> | 14 | #include <linux/spinlock.h> |
15 | #include <linux/i2c.h> | 15 | #include <linux/i2c.h> |
16 | #include <linux/interrupt.h> | 16 | #include <linux/interrupt.h> |
17 | #include <linux/mv643xx.h> | 17 | #include <linux/mv643xx_i2c.h> |
18 | #include <linux/platform_device.h> | 18 | #include <linux/platform_device.h> |
19 | 19 | ||
20 | #include <asm/io.h> | 20 | #include <asm/io.h> |
@@ -86,6 +86,7 @@ struct mv64xxx_i2c_data { | |||
86 | u32 cntl_bits; | 86 | u32 cntl_bits; |
87 | void __iomem *reg_base; | 87 | void __iomem *reg_base; |
88 | u32 reg_base_p; | 88 | u32 reg_base_p; |
89 | u32 reg_size; | ||
89 | u32 addr1; | 90 | u32 addr1; |
90 | u32 addr2; | 91 | u32 addr2; |
91 | u32 bytes_left; | 92 | u32 bytes_left; |
@@ -463,17 +464,20 @@ static int __devinit | |||
463 | mv64xxx_i2c_map_regs(struct platform_device *pd, | 464 | mv64xxx_i2c_map_regs(struct platform_device *pd, |
464 | struct mv64xxx_i2c_data *drv_data) | 465 | struct mv64xxx_i2c_data *drv_data) |
465 | { | 466 | { |
466 | struct resource *r; | 467 | int size; |
468 | struct resource *r = platform_get_resource(pd, IORESOURCE_MEM, 0); | ||
467 | 469 | ||
468 | if ((r = platform_get_resource(pd, IORESOURCE_MEM, 0)) && | 470 | if (!r) |
469 | request_mem_region(r->start, MV64XXX_I2C_REG_BLOCK_SIZE, | 471 | return -ENODEV; |
470 | drv_data->adapter.name)) { | ||
471 | 472 | ||
472 | drv_data->reg_base = ioremap(r->start, | 473 | size = r->end - r->start + 1; |
473 | MV64XXX_I2C_REG_BLOCK_SIZE); | 474 | |
474 | drv_data->reg_base_p = r->start; | 475 | if (!request_mem_region(r->start, size, drv_data->adapter.name)) |
475 | } else | 476 | return -EBUSY; |
476 | return -ENOMEM; | 477 | |
478 | drv_data->reg_base = ioremap(r->start, size); | ||
479 | drv_data->reg_base_p = r->start; | ||
480 | drv_data->reg_size = size; | ||
477 | 481 | ||
478 | return 0; | 482 | return 0; |
479 | } | 483 | } |
@@ -483,8 +487,7 @@ mv64xxx_i2c_unmap_regs(struct mv64xxx_i2c_data *drv_data) | |||
483 | { | 487 | { |
484 | if (drv_data->reg_base) { | 488 | if (drv_data->reg_base) { |
485 | iounmap(drv_data->reg_base); | 489 | iounmap(drv_data->reg_base); |
486 | release_mem_region(drv_data->reg_base_p, | 490 | release_mem_region(drv_data->reg_base_p, drv_data->reg_size); |
487 | MV64XXX_I2C_REG_BLOCK_SIZE); | ||
488 | } | 491 | } |
489 | 492 | ||
490 | drv_data->reg_base = NULL; | 493 | drv_data->reg_base = NULL; |
@@ -529,7 +532,6 @@ mv64xxx_i2c_probe(struct platform_device *pd) | |||
529 | drv_data->adapter.owner = THIS_MODULE; | 532 | drv_data->adapter.owner = THIS_MODULE; |
530 | drv_data->adapter.class = I2C_CLASS_HWMON; | 533 | drv_data->adapter.class = I2C_CLASS_HWMON; |
531 | drv_data->adapter.timeout = pdata->timeout; | 534 | drv_data->adapter.timeout = pdata->timeout; |
532 | drv_data->adapter.retries = pdata->retries; | ||
533 | drv_data->adapter.nr = pd->id; | 535 | drv_data->adapter.nr = pd->id; |
534 | platform_set_drvdata(pd, drv_data); | 536 | platform_set_drvdata(pd, drv_data); |
535 | i2c_set_adapdata(&drv_data->adapter, drv_data); | 537 | i2c_set_adapdata(&drv_data->adapter, drv_data); |