Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux

Pull i2c fixes from Wolfram Sang:
"We had various reports of problems with deferred probing in the I2C
subsystem, so this pull requst is a little bigger than usual.

Most issues should be addressed now so devices will be found
correctly. A few ususal driver bugfixes are in here, too"

* 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
i2c: i2c-mux-pinctrl: use deferred probe when adapter not found
i2c: i2c-arb-gpio-challenge: use deferred probe when adapter not found
i2c: i2c-mux-gpio: use deferred probing
i2c: i2c-mux-gpio: don't ignore of_get_named_gpio errors
i2c: omap: Clear ARDY bit twice
i2c: Not all adapters have a parent
i2c: i2c-stu300: replace platform_driver_probe to support deferred probing
i2c: i2c-mxs: replace platform_driver_probe to support deferred probing
i2c: i2c-imx: replace platform_driver_probe to support deferred probing
i2c: i2c-designware-platdrv: replace platform_driver_probe to support deferred probing

+34 -22
+3 -2
drivers/i2c/busses/i2c-designware-platdrv.c
··· 270 270 MODULE_ALIAS("platform:i2c_designware"); 271 271 272 272 static struct platform_driver dw_i2c_driver = { 273 - .remove = dw_i2c_remove, 273 + .probe = dw_i2c_probe, 274 + .remove = dw_i2c_remove, 274 275 .driver = { 275 276 .name = "i2c_designware", 276 277 .owner = THIS_MODULE, ··· 283 282 284 283 static int __init dw_i2c_init_driver(void) 285 284 { 286 - return platform_driver_probe(&dw_i2c_driver, dw_i2c_probe); 285 + return platform_driver_register(&dw_i2c_driver); 287 286 } 288 287 subsys_initcall(dw_i2c_init_driver); 289 288
+6 -5
drivers/i2c/busses/i2c-imx.c
··· 365 365 clk_disable_unprepare(i2c_imx->clk); 366 366 } 367 367 368 - static void __init i2c_imx_set_clk(struct imx_i2c_struct *i2c_imx, 368 + static void i2c_imx_set_clk(struct imx_i2c_struct *i2c_imx, 369 369 unsigned int rate) 370 370 { 371 371 struct imx_i2c_clk_pair *i2c_clk_div = i2c_imx->hwdata->clk_div; ··· 589 589 .functionality = i2c_imx_func, 590 590 }; 591 591 592 - static int __init i2c_imx_probe(struct platform_device *pdev) 592 + static int i2c_imx_probe(struct platform_device *pdev) 593 593 { 594 594 const struct of_device_id *of_id = of_match_device(i2c_imx_dt_ids, 595 595 &pdev->dev); ··· 697 697 return 0; /* Return OK */ 698 698 } 699 699 700 - static int __exit i2c_imx_remove(struct platform_device *pdev) 700 + static int i2c_imx_remove(struct platform_device *pdev) 701 701 { 702 702 struct imx_i2c_struct *i2c_imx = platform_get_drvdata(pdev); 703 703 ··· 715 715 } 716 716 717 717 static struct platform_driver i2c_imx_driver = { 718 - .remove = __exit_p(i2c_imx_remove), 718 + .probe = i2c_imx_probe, 719 + .remove = i2c_imx_remove, 719 720 .driver = { 720 721 .name = DRIVER_NAME, 721 722 .owner = THIS_MODULE, ··· 727 726 728 727 static int __init i2c_adap_imx_init(void) 729 728 { 730 - return platform_driver_probe(&i2c_imx_driver, i2c_imx_probe); 729 + return platform_driver_register(&i2c_imx_driver); 731 730 } 732 731 subsys_initcall(i2c_adap_imx_init); 733 732
+2 -1
drivers/i2c/busses/i2c-mxs.c
··· 780 780 .owner = THIS_MODULE, 781 781 .of_match_table = mxs_i2c_dt_ids, 782 782 }, 783 + .probe = mxs_i2c_probe, 783 784 .remove = mxs_i2c_remove, 784 785 }; 785 786 786 787 static int __init mxs_i2c_init(void) 787 788 { 788 - return platform_driver_probe(&mxs_i2c_driver, mxs_i2c_probe); 789 + return platform_driver_register(&mxs_i2c_driver); 789 790 } 790 791 subsys_initcall(mxs_i2c_init); 791 792
+3
drivers/i2c/busses/i2c-omap.c
··· 939 939 /* 940 940 * ProDB0017052: Clear ARDY bit twice 941 941 */ 942 + if (stat & OMAP_I2C_STAT_ARDY) 943 + omap_i2c_ack_stat(dev, OMAP_I2C_STAT_ARDY); 944 + 942 945 if (stat & (OMAP_I2C_STAT_ARDY | OMAP_I2C_STAT_NACK | 943 946 OMAP_I2C_STAT_AL)) { 944 947 omap_i2c_ack_stat(dev, (OMAP_I2C_STAT_RRDY |
+5 -6
drivers/i2c/busses/i2c-stu300.c
··· 859 859 .functionality = stu300_func, 860 860 }; 861 861 862 - static int __init 863 - stu300_probe(struct platform_device *pdev) 862 + static int stu300_probe(struct platform_device *pdev) 864 863 { 865 864 struct stu300_dev *dev; 866 865 struct i2c_adapter *adap; ··· 965 966 #define STU300_I2C_PM NULL 966 967 #endif 967 968 968 - static int __exit 969 - stu300_remove(struct platform_device *pdev) 969 + static int stu300_remove(struct platform_device *pdev) 970 970 { 971 971 struct stu300_dev *dev = platform_get_drvdata(pdev); 972 972 ··· 987 989 .pm = STU300_I2C_PM, 988 990 .of_match_table = stu300_dt_match, 989 991 }, 990 - .remove = __exit_p(stu300_remove), 992 + .probe = stu300_probe, 993 + .remove = stu300_remove, 991 994 992 995 }; 993 996 994 997 static int __init stu300_init(void) 995 998 { 996 - return platform_driver_probe(&stu300_i2c_driver, stu300_probe); 999 + return platform_driver_register(&stu300_i2c_driver); 997 1000 } 998 1001 999 1002 static void __exit stu300_exit(void)
+3
drivers/i2c/i2c-core.c
··· 1134 1134 acpi_handle handle; 1135 1135 acpi_status status; 1136 1136 1137 + if (!adap->dev.parent) 1138 + return; 1139 + 1137 1140 handle = ACPI_HANDLE(adap->dev.parent); 1138 1141 if (!handle) 1139 1142 return;
+1 -1
drivers/i2c/muxes/i2c-arb-gpio-challenge.c
··· 200 200 arb->parent = of_find_i2c_adapter_by_node(parent_np); 201 201 if (!arb->parent) { 202 202 dev_err(dev, "Cannot find parent bus\n"); 203 - return -EINVAL; 203 + return -EPROBE_DEFER; 204 204 } 205 205 206 206 /* Actually add the mux adapter */
+9 -5
drivers/i2c/muxes/i2c-mux-gpio.c
··· 66 66 struct device_node *adapter_np, *child; 67 67 struct i2c_adapter *adapter; 68 68 unsigned *values, *gpios; 69 - int i = 0; 69 + int i = 0, ret; 70 70 71 71 if (!np) 72 72 return -ENODEV; ··· 79 79 adapter = of_find_i2c_adapter_by_node(adapter_np); 80 80 if (!adapter) { 81 81 dev_err(&pdev->dev, "Cannot find parent bus\n"); 82 - return -ENODEV; 82 + return -EPROBE_DEFER; 83 83 } 84 84 mux->data.parent = i2c_adapter_id(adapter); 85 85 put_device(&adapter->dev); ··· 116 116 return -ENOMEM; 117 117 } 118 118 119 - for (i = 0; i < mux->data.n_gpios; i++) 120 - gpios[i] = of_get_named_gpio(np, "mux-gpios", i); 119 + for (i = 0; i < mux->data.n_gpios; i++) { 120 + ret = of_get_named_gpio(np, "mux-gpios", i); 121 + if (ret < 0) 122 + return ret; 123 + gpios[i] = ret; 124 + } 121 125 122 126 mux->data.gpios = gpios; 123 127 ··· 181 177 if (!parent) { 182 178 dev_err(&pdev->dev, "Parent adapter (%d) not found\n", 183 179 mux->data.parent); 184 - return -ENODEV; 180 + return -EPROBE_DEFER; 185 181 } 186 182 187 183 mux->parent = parent;
+2 -2
drivers/i2c/muxes/i2c-mux-pinctrl.c
··· 113 113 adapter = of_find_i2c_adapter_by_node(adapter_np); 114 114 if (!adapter) { 115 115 dev_err(mux->dev, "Cannot find parent bus\n"); 116 - return -ENODEV; 116 + return -EPROBE_DEFER; 117 117 } 118 118 mux->pdata->parent_bus_num = i2c_adapter_id(adapter); 119 119 put_device(&adapter->dev); ··· 211 211 if (!mux->parent) { 212 212 dev_err(&pdev->dev, "Parent adapter (%d) not found\n", 213 213 mux->pdata->parent_bus_num); 214 - ret = -ENODEV; 214 + ret = -EPROBE_DEFER; 215 215 goto err; 216 216 } 217 217