| From 1f79ddbbd72521794155cd79c2e5a41221d75a69 Mon Sep 17 00:00:00 2001 |
| From: Wolfram Sang <wsa@the-dreams.de> |
| Date: Tue, 8 Oct 2013 22:35:34 +0200 |
| Subject: i2c: i2c-imx: replace platform_driver_probe to support deferred |
| probing |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| Subsystems like pinctrl and gpio rightfully make use of deferred probing at |
| core level. Now, deferred drivers won't be retried if they don't have a .probe |
| function specified in the driver struct. Fix this driver to have that, so the |
| devices it supports won't get lost in a deferred probe. |
| |
| Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> |
| Signed-off-by: Wolfram Sang <wsa@the-dreams.de> |
| (cherry picked from commit 3611431ce7281a6542d47bd5b2fc2206fed5749f) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/i2c/busses/i2c-imx.c | 11 ++++++----- |
| 1 file changed, 6 insertions(+), 5 deletions(-) |
| |
| diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c |
| index ccf46656bdad..1d7efa3169cd 100644 |
| --- a/drivers/i2c/busses/i2c-imx.c |
| +++ b/drivers/i2c/busses/i2c-imx.c |
| @@ -365,7 +365,7 @@ static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx) |
| clk_disable_unprepare(i2c_imx->clk); |
| } |
| |
| -static void __init i2c_imx_set_clk(struct imx_i2c_struct *i2c_imx, |
| +static void i2c_imx_set_clk(struct imx_i2c_struct *i2c_imx, |
| unsigned int rate) |
| { |
| struct imx_i2c_clk_pair *i2c_clk_div = i2c_imx->hwdata->clk_div; |
| @@ -589,7 +589,7 @@ static struct i2c_algorithm i2c_imx_algo = { |
| .functionality = i2c_imx_func, |
| }; |
| |
| -static int __init i2c_imx_probe(struct platform_device *pdev) |
| +static int i2c_imx_probe(struct platform_device *pdev) |
| { |
| const struct of_device_id *of_id = of_match_device(i2c_imx_dt_ids, |
| &pdev->dev); |
| @@ -697,7 +697,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev) |
| return 0; /* Return OK */ |
| } |
| |
| -static int __exit i2c_imx_remove(struct platform_device *pdev) |
| +static int i2c_imx_remove(struct platform_device *pdev) |
| { |
| struct imx_i2c_struct *i2c_imx = platform_get_drvdata(pdev); |
| |
| @@ -715,7 +715,8 @@ static int __exit i2c_imx_remove(struct platform_device *pdev) |
| } |
| |
| static struct platform_driver i2c_imx_driver = { |
| - .remove = __exit_p(i2c_imx_remove), |
| + .probe = i2c_imx_probe, |
| + .remove = i2c_imx_remove, |
| .driver = { |
| .name = DRIVER_NAME, |
| .owner = THIS_MODULE, |
| @@ -726,7 +727,7 @@ static struct platform_driver i2c_imx_driver = { |
| |
| static int __init i2c_adap_imx_init(void) |
| { |
| - return platform_driver_probe(&i2c_imx_driver, i2c_imx_probe); |
| + return platform_driver_register(&i2c_imx_driver); |
| } |
| subsys_initcall(i2c_adap_imx_init); |
| |
| -- |
| 1.8.5.rc3 |
| |