From: Bjorn Andersson Date: Tue, 21 Sep 2021 22:49:38 +0000 (-0500) Subject: Merge tag '1630420228-31075-2-git-send-email-deesin@codeaurora.org' into drivers... X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=665783d887dac334db9be1fbef09f87991e88db6;p=linux.git Merge tag '1630420228-31075-2-git-send-email-deesin@codeaurora.org' into drivers-for-5.16 --- 665783d887dac334db9be1fbef09f87991e88db6 diff --cc drivers/soc/qcom/qcom_aoss.c index c42b80ee39200,bb336cc8df6f6..aac36f0b58e49 --- a/drivers/soc/qcom/qcom_aoss.c +++ b/drivers/soc/qcom/qcom_aoss.c @@@ -519,8 -525,54 +525,53 @@@ static void qmp_cooling_devices_remove( thermal_cooling_device_unregister(qmp->cooling_devs[i].cdev); } + /** + * qmp_get() - get a qmp handle from a device + * @dev: client device pointer + * + * Return: handle to qmp device on success, ERR_PTR() on failure + */ + struct qmp *qmp_get(struct device *dev) + { + struct platform_device *pdev; + struct device_node *np; + struct qmp *qmp; + + if (!dev || !dev->of_node) + return ERR_PTR(-EINVAL); + + np = of_parse_phandle(dev->of_node, "qcom,qmp", 0); + if (!np) + return ERR_PTR(-ENODEV); + + pdev = of_find_device_by_node(np); + of_node_put(np); + if (!pdev) + return ERR_PTR(-EINVAL); + + qmp = platform_get_drvdata(pdev); + + return qmp ? qmp : ERR_PTR(-EPROBE_DEFER); + } + EXPORT_SYMBOL(qmp_get); + + /** + * qmp_put() - release a qmp handle + * @qmp: qmp handle obtained from qmp_get() + */ + void qmp_put(struct qmp *qmp) + { + /* + * Match get_device() inside of_find_device_by_node() in + * qmp_get() + */ + if (!IS_ERR_OR_NULL(qmp)) + put_device(qmp->dev); + } + EXPORT_SYMBOL(qmp_put); + static int qmp_probe(struct platform_device *pdev) { - struct resource *res; struct qmp *qmp; int irq; int ret;