Re: [PATCH v5 2/3] mfd: qcom-rpm: Driver for the Qualcomm RPM
From: Bjorn Andersson <hidden>
Date: 2014-08-22 01:27:57
Also in:
linux-arm-kernel, linux-arm-msm, lkml
On Thu 21 Aug 06:22 PDT 2014, Lee Jones wrote:
quoted
diff --git a/drivers/mfd/qcom_rpm.c b/drivers/mfd/qcom_rpm.c +static const struct qcom_rpm_data msm8660_template = { + .version = -1,-1?
2 would be a better number...
quoted
+ .resource_table = msm8660_rpm_resource_table, + .n_resources = ARRAY_SIZE(msm8660_rpm_resource_table), +};[...]quoted
+struct qcom_rpm *dev_get_qcom_rpm(struct device *dev) +{ + return dev_get_drvdata(dev); +} +EXPORT_SYMBOL(dev_get_qcom_rpm);No need for this at all. Use dev_get_drvdata() direct instead.
I see that others have put this as static inline in the header file, so I will follow that. I don't want to expose this directly in the implementation of the clients. Let me know if you object.
[...]quoted
+static int qcom_rpm_probe(struct platform_device *pdev) +{
[...]
quoted
+ + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + rpm->status_regs = devm_ioremap_resource(&pdev->dev, res); + rpm->ctrl_regs = rpm->status_regs + 0x400; + rpm->req_regs = rpm->status_regs + 0x600; + if (IS_ERR(rpm->status_regs)) + return PTR_ERR(rpm->status_regs);You should probably do this _before_ using it above.
There's no difference in behaviour, but it just feels cleaner than: res = platform_get_resource(pdev, IORESOURCE_MEM, 0); rpm->status_regs = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(rpm->status_regs)) return PTR_ERR(rpm->status_regs); rpm->ctrl_regs = rpm->status_regs + 0x400; rpm->req_regs = rpm->status_regs + 0x600; If you don't like it, I'll change it. [...]
quoted
+ + writel(fw_version[0], RPM_CTRL_REG(rpm, 0)); + writel(fw_version[1], RPM_CTRL_REG(rpm, 1)); + writel(fw_version[2], RPM_CTRL_REG(rpm, 2));A comment documenting what this is doing would be helpful here.
Sounds reasonable, this seems to be incorrect now that I had to investigate what's really happening. So I'll update it. [...]
quoted
+} + +static int qcom_rpm_remove_child(struct device *dev, void *unused) +{ + platform_device_unregister(to_platform_device(dev)); + return 0; +} + +static int qcom_rpm_remove(struct platform_device *pdev) +{ + device_for_each_child(&pdev->dev, NULL, qcom_rpm_remove_child);of_platform_depopulate()?
Forgot that we had that now, will update.
quoted
+ return 0; +} + +static struct platform_driver qcom_rpm_driver = { + .probe = qcom_rpm_probe, + .remove = qcom_rpm_remove, + .driver = { + .name = "qcom_rpm", + .owner = THIS_MODULE,Remove this line, it's taken care of for you.
OK
quoted
+ .of_match_table = qcom_rpm_of_match, + }, +}; + +static int __init qcom_rpm_init(void) +{ + return platform_driver_register(&qcom_rpm_driver); +} +arch_initcall(qcom_rpm_init); + +static void __exit qcom_rpm_exit(void) +{ + platform_driver_unregister(&qcom_rpm_driver); +} +module_exit(qcom_rpm_exit) + +MODULE_DESCRIPTION("Qualcomm Resource Power Manager driver"); +MODULE_LICENSE("GPL v2");No one authored this driver?
Thought that was optional, will update. Thanks for the review! Regards, Bjorn