diff options
author | Ben Dooks <ben-linux@fluff.org> | 2008-07-28 07:04:06 -0400 |
---|---|---|
committer | Ben Dooks <ben-linux@fluff.org> | 2008-07-28 07:05:26 -0400 |
commit | 399dee2371787825a1845de87c0cbee7b7c30ad6 (patch) | |
tree | 4593e986826f9a798e9d9c7bb399bcaa67e1d3a7 | |
parent | c9272c4f9fbe2087beb3392f526dc5b19efaa56b (diff) |
i2c: S3C2410: Pass the I2C bus number via drivers platform data
Allow the platform data to specify the bus bumber that the
new I2C bus will be given. This is to allow the use of the
board registration mechanism to specify the new style of
I2C device registration which allows boards to provide a
list of attached devices.
Note, as discussed on the mailing list, we have dropped
backwards compatibility of adding an dynamic bus number
as it should not affect most boards to have the bus pinned
to 0 if they have either not specified platform data for
driver. Any board supplying platform data will automatically
have the bus_num field set to 0, and anyone who needs the
driver on a different bus number can supply platform data
to set bus_num.
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
-rw-r--r-- | drivers/i2c/busses/i2c-s3c2410.c | 13 | ||||
-rw-r--r-- | include/asm-arm/plat-s3c/iic.h | 1 |
2 files changed, 13 insertions, 1 deletions
diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c index 007390ad9810..eef35d3f6073 100644 --- a/drivers/i2c/busses/i2c-s3c2410.c +++ b/drivers/i2c/busses/i2c-s3c2410.c | |||
@@ -752,9 +752,12 @@ static int s3c24xx_i2c_init(struct s3c24xx_i2c *i2c) | |||
752 | static int s3c24xx_i2c_probe(struct platform_device *pdev) | 752 | static int s3c24xx_i2c_probe(struct platform_device *pdev) |
753 | { | 753 | { |
754 | struct s3c24xx_i2c *i2c = &s3c24xx_i2c; | 754 | struct s3c24xx_i2c *i2c = &s3c24xx_i2c; |
755 | struct s3c2410_platform_i2c *pdata; | ||
755 | struct resource *res; | 756 | struct resource *res; |
756 | int ret; | 757 | int ret; |
757 | 758 | ||
759 | pdata = s3c24xx_i2c_get_platformdata(&pdev->dev); | ||
760 | |||
758 | /* find the clock and enable it */ | 761 | /* find the clock and enable it */ |
759 | 762 | ||
760 | i2c->dev = &pdev->dev; | 763 | i2c->dev = &pdev->dev; |
@@ -832,7 +835,15 @@ static int s3c24xx_i2c_probe(struct platform_device *pdev) | |||
832 | dev_dbg(&pdev->dev, "irq resource %p (%lu)\n", res, | 835 | dev_dbg(&pdev->dev, "irq resource %p (%lu)\n", res, |
833 | (unsigned long)res->start); | 836 | (unsigned long)res->start); |
834 | 837 | ||
835 | ret = i2c_add_adapter(&i2c->adap); | 838 | /* Note, previous versions of the driver used i2c_add_adapter() |
839 | * to add the bus at any number. We now pass the bus number via | ||
840 | * the platform data, so if unset it will now default to always | ||
841 | * being bus 0. | ||
842 | */ | ||
843 | |||
844 | i2c->adap.nr = pdata->bus_num; | ||
845 | |||
846 | ret = i2c_add_numbered_adapter(&i2c->adap); | ||
836 | if (ret < 0) { | 847 | if (ret < 0) { |
837 | dev_err(&pdev->dev, "failed to add bus to i2c core\n"); | 848 | dev_err(&pdev->dev, "failed to add bus to i2c core\n"); |
838 | goto err_irq; | 849 | goto err_irq; |
diff --git a/include/asm-arm/plat-s3c/iic.h b/include/asm-arm/plat-s3c/iic.h index 71211c8b5384..d08a1f2863e4 100644 --- a/include/asm-arm/plat-s3c/iic.h +++ b/include/asm-arm/plat-s3c/iic.h | |||
@@ -21,6 +21,7 @@ | |||
21 | */ | 21 | */ |
22 | 22 | ||
23 | struct s3c2410_platform_i2c { | 23 | struct s3c2410_platform_i2c { |
24 | int bus_num; /* bus number to use */ | ||
24 | unsigned int flags; | 25 | unsigned int flags; |
25 | unsigned int slave_addr; /* slave address for controller */ | 26 | unsigned int slave_addr; /* slave address for controller */ |
26 | unsigned long bus_freq; /* standard bus frequency */ | 27 | unsigned long bus_freq; /* standard bus frequency */ |