diff options
-rw-r--r-- | drivers/i2c/busses/i2c-s3c2410.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c index f84a63c6dd97..266dd83a3ec2 100644 --- a/drivers/i2c/busses/i2c-s3c2410.c +++ b/drivers/i2c/busses/i2c-s3c2410.c | |||
@@ -78,6 +78,7 @@ struct s3c24xx_i2c { | |||
78 | struct resource *ioarea; | 78 | struct resource *ioarea; |
79 | struct i2c_adapter adap; | 79 | struct i2c_adapter adap; |
80 | 80 | ||
81 | struct s3c2410_platform_i2c *pdata; | ||
81 | #ifdef CONFIG_CPU_FREQ | 82 | #ifdef CONFIG_CPU_FREQ |
82 | struct notifier_block freq_transition; | 83 | struct notifier_block freq_transition; |
83 | #endif | 84 | #endif |
@@ -625,7 +626,7 @@ static int s3c24xx_i2c_calcdivisor(unsigned long clkin, unsigned int wanted, | |||
625 | 626 | ||
626 | static int s3c24xx_i2c_clockrate(struct s3c24xx_i2c *i2c, unsigned int *got) | 627 | static int s3c24xx_i2c_clockrate(struct s3c24xx_i2c *i2c, unsigned int *got) |
627 | { | 628 | { |
628 | struct s3c2410_platform_i2c *pdata = i2c->dev->platform_data; | 629 | struct s3c2410_platform_i2c *pdata = i2c->pdata; |
629 | unsigned long clkin = clk_get_rate(i2c->clk); | 630 | unsigned long clkin = clk_get_rate(i2c->clk); |
630 | unsigned int divs, div1; | 631 | unsigned int divs, div1; |
631 | unsigned long target_frequency; | 632 | unsigned long target_frequency; |
@@ -754,7 +755,7 @@ static int s3c24xx_i2c_init(struct s3c24xx_i2c *i2c) | |||
754 | 755 | ||
755 | /* get the plafrom data */ | 756 | /* get the plafrom data */ |
756 | 757 | ||
757 | pdata = i2c->dev->platform_data; | 758 | pdata = i2c->pdata; |
758 | 759 | ||
759 | /* inititalise the gpio */ | 760 | /* inititalise the gpio */ |
760 | 761 | ||
@@ -793,7 +794,7 @@ static int s3c24xx_i2c_init(struct s3c24xx_i2c *i2c) | |||
793 | static int s3c24xx_i2c_probe(struct platform_device *pdev) | 794 | static int s3c24xx_i2c_probe(struct platform_device *pdev) |
794 | { | 795 | { |
795 | struct s3c24xx_i2c *i2c; | 796 | struct s3c24xx_i2c *i2c; |
796 | struct s3c2410_platform_i2c *pdata; | 797 | struct s3c2410_platform_i2c *pdata = NULL; |
797 | struct resource *res; | 798 | struct resource *res; |
798 | int ret; | 799 | int ret; |
799 | 800 | ||
@@ -809,6 +810,15 @@ static int s3c24xx_i2c_probe(struct platform_device *pdev) | |||
809 | return -ENOMEM; | 810 | return -ENOMEM; |
810 | } | 811 | } |
811 | 812 | ||
813 | i2c->pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); | ||
814 | if (!i2c->pdata) { | ||
815 | ret = -ENOMEM; | ||
816 | goto err_noclk; | ||
817 | } | ||
818 | |||
819 | if (pdata) | ||
820 | memcpy(i2c->pdata, pdata, sizeof(*pdata)); | ||
821 | |||
812 | strlcpy(i2c->adap.name, "s3c2410-i2c", sizeof(i2c->adap.name)); | 822 | strlcpy(i2c->adap.name, "s3c2410-i2c", sizeof(i2c->adap.name)); |
813 | i2c->adap.owner = THIS_MODULE; | 823 | i2c->adap.owner = THIS_MODULE; |
814 | i2c->adap.algo = &s3c24xx_i2c_algorithm; | 824 | i2c->adap.algo = &s3c24xx_i2c_algorithm; |
@@ -903,7 +913,7 @@ static int s3c24xx_i2c_probe(struct platform_device *pdev) | |||
903 | * being bus 0. | 913 | * being bus 0. |
904 | */ | 914 | */ |
905 | 915 | ||
906 | i2c->adap.nr = pdata->bus_num; | 916 | i2c->adap.nr = i2c->pdata->bus_num; |
907 | 917 | ||
908 | ret = i2c_add_numbered_adapter(&i2c->adap); | 918 | ret = i2c_add_numbered_adapter(&i2c->adap); |
909 | if (ret < 0) { | 919 | if (ret < 0) { |