[PATCH linux dev-4.13 2/2] drivers: occ: Create hwmon platform device directly
Andrew Jeffery
andrew at aj.id.au
Fri Feb 23 15:59:12 AEDT 2018
On Wed, 21 Feb 2018, at 07:57, Eddie James wrote:
> Previously, the OCC driver parses the device tree and creates platform
> devices for each child node found there. This was used to probe the
> OCC hwmon devices. However, this doesn't make sense since hmwon isn't a
> device. Therefore, just directly create a platform device for each OCC
> for the hwmon driver to probe.
>
> Signed-off-by: Eddie James <eajames at linux.vnet.ibm.com>
This reduces our dependence on bad devicetree practices, so:
Acked-by: Andrew Jeffery <andrew at aj.id.au>
> ---
> drivers/fsi/fsi-occ.c | 29 ++++++++++++-----------------
> drivers/hwmon/occ/p9_sbe.c | 6 ------
> 2 files changed, 12 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/fsi/fsi-occ.c b/drivers/fsi/fsi-occ.c
> index 1713550..8a1d0a1 100644
> --- a/drivers/fsi/fsi-occ.c
> +++ b/drivers/fsi/fsi-occ.c
> @@ -21,7 +21,6 @@
> #include <linux/mutex.h>
> #include <linux/fsi-occ.h>
> #include <linux/of.h>
> -#include <linux/of_platform.h>
> #include <linux/platform_device.h>
> #include <linux/sched.h>
> #include <linux/slab.h>
> @@ -737,24 +736,24 @@ void occ_drv_release(struct occ_client *client)
>
> static int occ_unregister_child(struct device *dev, void *data)
> {
> - struct platform_device *child = to_platform_device(dev);
> + struct platform_device *hwmon_dev = to_platform_device(dev);
>
> - of_device_unregister(child);
> - if (dev->of_node)
> - of_node_clear_flag(dev->of_node, OF_POPULATED);
> + platform_device_unregister(hwmon_dev);
>
> return 0;
> }
>
> static int occ_probe(struct platform_device *pdev)
> {
> - int rc, child_idx = 0;
> + int rc;
> u32 reg;
> struct occ *occ;
> - struct device_node *np;
> - struct platform_device *child;
> + struct platform_device *hwmon_dev;
> struct device *dev = &pdev->dev;
> - char child_name[32];
> + struct platform_device_info hwmon_dev_info = {
> + .parent = dev,
> + .name = "occ-hwmon",
> + };
>
> occ = devm_kzalloc(dev, sizeof(*occ), GFP_KERNEL);
> if (!occ)
> @@ -796,14 +795,10 @@ static int occ_probe(struct platform_device *pdev)
> return rc;
> }
>
> - /* create platform devs for dts child nodes (hwmon, etc) */
> - for_each_available_child_of_node(dev->of_node, np) {
> - snprintf(child_name, sizeof(child_name), "occ%d-dev%d",
> - occ->idx, child_idx++);
> - child = of_platform_device_create(np, child_name, dev);
> - if (!child)
> - dev_warn(dev, "failed to create child node dev\n");
> - }
> + hwmon_dev_info.id = occ->idx;
> + hwmon_dev = platform_device_register_full(&hwmon_dev_info);
> + if (!hwmon_dev)
> + dev_warn(dev, "failed to create hwmon device\n");
>
> platform_set_drvdata(pdev, occ);
>
> diff --git a/drivers/hwmon/occ/p9_sbe.c b/drivers/hwmon/occ/p9_sbe.c
> index 7dbe4d5..451a393 100644
> --- a/drivers/hwmon/occ/p9_sbe.c
> +++ b/drivers/hwmon/occ/p9_sbe.c
> @@ -140,15 +140,9 @@ static int p9_sbe_occ_remove(struct platform_device *pdev)
> return 0;
> }
>
> -static const struct of_device_id p9_sbe_occ_of_match[] = {
> - { .compatible = "ibm,p9-occ-hwmon" },
> - { },
> -};
> -
> static struct platform_driver p9_sbe_occ_driver = {
> .driver = {
> .name = "occ-hwmon",
> - .of_match_table = p9_sbe_occ_of_match,
> },
> .probe = p9_sbe_occ_probe,
> .remove = p9_sbe_occ_remove,
> --
> 1.8.3.1
>
--
Andrew Jeffery
andrew at aj.id.au
More information about the openbmc
mailing list