[PATCH 10/10] soc: qcom: convert to devm_platform_ioremap_resource

2019-12-14 Thread Yangtao Li
Use devm_platform_ioremap_resource() to simplify code.

Signed-off-by: Yangtao Li 
---
 drivers/soc/qcom/llcc-qcom.c| 7 +--
 drivers/soc/qcom/qcom-geni-se.c | 4 +---
 drivers/soc/qcom/qcom_aoss.c| 4 +---
 drivers/soc/qcom/qcom_gsbi.c| 5 +
 drivers/soc/qcom/spm.c  | 4 +---
 5 files changed, 5 insertions(+), 19 deletions(-)

diff --git a/drivers/soc/qcom/llcc-qcom.c b/drivers/soc/qcom/llcc-qcom.c
index 429b5a60a1ba..99e19df76889 100644
--- a/drivers/soc/qcom/llcc-qcom.c
+++ b/drivers/soc/qcom/llcc-qcom.c
@@ -387,7 +387,6 @@ static int qcom_llcc_remove(struct platform_device *pdev)
 static struct regmap *qcom_llcc_init_mmio(struct platform_device *pdev,
const char *name)
 {
-   struct resource *res;
void __iomem *base;
struct regmap_config llcc_regmap_config = {
.reg_bits = 32,
@@ -396,11 +395,7 @@ static struct regmap *qcom_llcc_init_mmio(struct 
platform_device *pdev,
.fast_io = true,
};
 
-   res = platform_get_resource_byname(pdev, IORESOURCE_MEM, name);
-   if (!res)
-   return ERR_PTR(-ENODEV);
-
-   base = devm_ioremap_resource(>dev, res);
+   base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(base))
return ERR_CAST(base);
 
diff --git a/drivers/soc/qcom/qcom-geni-se.c b/drivers/soc/qcom/qcom-geni-se.c
index 7d622ea1274e..9c2c429b4b3f 100644
--- a/drivers/soc/qcom/qcom-geni-se.c
+++ b/drivers/soc/qcom/qcom-geni-se.c
@@ -723,7 +723,6 @@ EXPORT_SYMBOL(geni_se_rx_dma_unprep);
 static int geni_se_probe(struct platform_device *pdev)
 {
struct device *dev = >dev;
-   struct resource *res;
struct geni_wrapper *wrapper;
int ret;
 
@@ -732,8 +731,7 @@ static int geni_se_probe(struct platform_device *pdev)
return -ENOMEM;
 
wrapper->dev = dev;
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   wrapper->base = devm_ioremap_resource(dev, res);
+   wrapper->base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(wrapper->base))
return PTR_ERR(wrapper->base);
 
diff --git a/drivers/soc/qcom/qcom_aoss.c b/drivers/soc/qcom/qcom_aoss.c
index 006ac40c526a..fcfba9f1aaa1 100644
--- a/drivers/soc/qcom/qcom_aoss.c
+++ b/drivers/soc/qcom/qcom_aoss.c
@@ -513,7 +513,6 @@ static void qmp_cooling_devices_remove(struct qmp *qmp)
 
 static int qmp_probe(struct platform_device *pdev)
 {
-   struct resource *res;
struct qmp *qmp;
int irq;
int ret;
@@ -526,8 +525,7 @@ static int qmp_probe(struct platform_device *pdev)
init_waitqueue_head(>event);
mutex_init(>tx_lock);
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   qmp->msgram = devm_ioremap_resource(>dev, res);
+   qmp->msgram = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(qmp->msgram))
return PTR_ERR(qmp->msgram);
 
diff --git a/drivers/soc/qcom/qcom_gsbi.c b/drivers/soc/qcom/qcom_gsbi.c
index 304afc223a58..202ff31cf54f 100644
--- a/drivers/soc/qcom/qcom_gsbi.c
+++ b/drivers/soc/qcom/qcom_gsbi.c
@@ -127,7 +127,6 @@ static int gsbi_probe(struct platform_device *pdev)
struct device_node *node = pdev->dev.of_node;
struct device_node *tcsr_node;
const struct of_device_id *match;
-   struct resource *res;
void __iomem *base;
struct gsbi_info *gsbi;
int i, ret;
@@ -135,12 +134,10 @@ static int gsbi_probe(struct platform_device *pdev)
const struct crci_config *config = NULL;
 
gsbi = devm_kzalloc(>dev, sizeof(*gsbi), GFP_KERNEL);
-
if (!gsbi)
return -ENOMEM;
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   base = devm_ioremap_resource(>dev, res);
+   base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(base))
return PTR_ERR(base);
 
diff --git a/drivers/soc/qcom/spm.c b/drivers/soc/qcom/spm.c
index 8e10e02c6aa5..b6131ab07879 100644
--- a/drivers/soc/qcom/spm.c
+++ b/drivers/soc/qcom/spm.c
@@ -320,7 +320,6 @@ static const struct of_device_id spm_match_table[] = {
 static int spm_dev_probe(struct platform_device *pdev)
 {
struct spm_driver_data *drv;
-   struct resource *res;
const struct of_device_id *match_id;
void __iomem *addr;
int cpu;
@@ -329,8 +328,7 @@ static int spm_dev_probe(struct platform_device *pdev)
if (!drv)
return -EINVAL;
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   drv->reg_base = devm_ioremap_resource(>dev, res);
+   drv->reg_base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(drv->reg_base))
return PTR_ERR(drv->reg_base);
 
-- 
2.17.1



[PATCH 09/10] soc: ixp4xx: qmgr: convert to devm_platform_ioremap_resource

2019-12-14 Thread Yangtao Li
Use devm_platform_ioremap_resource() to simplify code.

Signed-off-by: Yangtao Li 
---
 drivers/soc/ixp4xx/ixp4xx-qmgr.c | 6 +-
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/drivers/soc/ixp4xx/ixp4xx-qmgr.c b/drivers/soc/ixp4xx/ixp4xx-qmgr.c
index 8c968382cea7..520babbd9037 100644
--- a/drivers/soc/ixp4xx/ixp4xx-qmgr.c
+++ b/drivers/soc/ixp4xx/ixp4xx-qmgr.c
@@ -375,13 +375,9 @@ static int ixp4xx_qmgr_probe(struct platform_device *pdev)
int i, err;
irq_handler_t handler1, handler2;
struct device *dev = >dev;
-   struct resource *res;
int irq1, irq2;
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!res)
-   return -ENODEV;
-   qmgr_regs = devm_ioremap_resource(dev, res);
+   qmgr_regs = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(qmgr_regs))
return PTR_ERR(qmgr_regs);
 
-- 
2.17.1



[PATCH 08/10] soc: lantiq: convert to devm_platform_ioremap_resource

2019-12-14 Thread Yangtao Li
Use devm_platform_ioremap_resource() to simplify code.

Signed-off-by: Yangtao Li 
---
 drivers/soc/lantiq/fpi-bus.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/soc/lantiq/fpi-bus.c b/drivers/soc/lantiq/fpi-bus.c
index cb0303a0fe60..dff1375851cf 100644
--- a/drivers/soc/lantiq/fpi-bus.c
+++ b/drivers/soc/lantiq/fpi-bus.c
@@ -28,14 +28,12 @@ static int ltq_fpi_probe(struct platform_device *pdev)
 {
struct device *dev = >dev;
struct device_node *np = dev->of_node;
-   struct resource *res_xbar;
struct regmap *rcu_regmap;
void __iomem *xbar_membase;
u32 rcu_ahb_endianness_reg_offset;
int ret;
 
-   res_xbar = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   xbar_membase = devm_ioremap_resource(dev, res_xbar);
+   xbar_membase = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(xbar_membase))
return PTR_ERR(xbar_membase);
 
-- 
2.17.1



[PATCH 07/10] soc: ti: wkup_m3_ipc: convert to devm_platform_ioremap_resource

2019-12-14 Thread Yangtao Li
Use devm_platform_ioremap_resource() to simplify code.

Signed-off-by: Yangtao Li 
---
 drivers/soc/ti/wkup_m3_ipc.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/soc/ti/wkup_m3_ipc.c b/drivers/soc/ti/wkup_m3_ipc.c
index 378369d9364a..e058f67e6333 100644
--- a/drivers/soc/ti/wkup_m3_ipc.c
+++ b/drivers/soc/ti/wkup_m3_ipc.c
@@ -429,7 +429,6 @@ static int wkup_m3_ipc_probe(struct platform_device *pdev)
int irq, ret;
phandle rproc_phandle;
struct rproc *m3_rproc;
-   struct resource *res;
struct task_struct *task;
struct wkup_m3_ipc *m3_ipc;
 
@@ -437,8 +436,7 @@ static int wkup_m3_ipc_probe(struct platform_device *pdev)
if (!m3_ipc)
return -ENOMEM;
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   m3_ipc->ipc_mem_base = devm_ioremap_resource(dev, res);
+   m3_ipc->ipc_mem_base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(m3_ipc->ipc_mem_base)) {
dev_err(dev, "could not ioremap ipc_mem\n");
return PTR_ERR(m3_ipc->ipc_mem_base);
-- 
2.17.1



[PATCH 06/10] soc: mediatek: convert to devm_platform_ioremap_resource

2019-12-14 Thread Yangtao Li
Use devm_platform_ioremap_resource() to simplify code.

Signed-off-by: Yangtao Li 
---
 drivers/soc/mediatek/mtk-scpsys.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-scpsys.c 
b/drivers/soc/mediatek/mtk-scpsys.c
index f669d3754627..2aa2afdc9ccf 100644
--- a/drivers/soc/mediatek/mtk-scpsys.c
+++ b/drivers/soc/mediatek/mtk-scpsys.c
@@ -425,7 +425,6 @@ static struct scp *init_scp(struct platform_device *pdev,
bool bus_prot_reg_update)
 {
struct genpd_onecell_data *pd_data;
-   struct resource *res;
int i, j;
struct scp *scp;
struct clk *clk[CLK_MAX];
@@ -441,8 +440,7 @@ static struct scp *init_scp(struct platform_device *pdev,
 
scp->dev = >dev;
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   scp->base = devm_ioremap_resource(>dev, res);
+   scp->base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(scp->base))
return ERR_CAST(scp->base);
 
-- 
2.17.1



[PATCH 05/10] soc: fsl: convert to devm_platform_ioremap_resource

2019-12-14 Thread Yangtao Li
Use devm_platform_ioremap_resource() to simplify code.

Signed-off-by: Yangtao Li 
---
 drivers/soc/fsl/guts.c | 4 +---
 drivers/soc/fsl/rcpm.c | 7 +--
 2 files changed, 2 insertions(+), 9 deletions(-)

diff --git a/drivers/soc/fsl/guts.c b/drivers/soc/fsl/guts.c
index 34810f9bb2ee..ebec06a22ab4 100644
--- a/drivers/soc/fsl/guts.c
+++ b/drivers/soc/fsl/guts.c
@@ -140,7 +140,6 @@ static int fsl_guts_probe(struct platform_device *pdev)
 {
struct device_node *np = pdev->dev.of_node;
struct device *dev = >dev;
-   struct resource *res;
const struct fsl_soc_die_attr *soc_die;
const char *machine;
u32 svr;
@@ -152,8 +151,7 @@ static int fsl_guts_probe(struct platform_device *pdev)
 
guts->little_endian = of_property_read_bool(np, "little-endian");
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   guts->regs = devm_ioremap_resource(dev, res);
+   guts->regs = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(guts->regs))
return PTR_ERR(guts->regs);
 
diff --git a/drivers/soc/fsl/rcpm.c b/drivers/soc/fsl/rcpm.c
index a093dbe6d2cb..322fde95974b 100644
--- a/drivers/soc/fsl/rcpm.c
+++ b/drivers/soc/fsl/rcpm.c
@@ -102,7 +102,6 @@ static const struct dev_pm_ops rcpm_pm_ops = {
 static int rcpm_probe(struct platform_device *pdev)
 {
struct device   *dev = >dev;
-   struct resource *r;
struct rcpm *rcpm;
int ret;
 
@@ -110,11 +109,7 @@ static int rcpm_probe(struct platform_device *pdev)
if (!rcpm)
return -ENOMEM;
 
-   r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!r)
-   return -ENODEV;
-
-   rcpm->ippdexpcr_base = devm_ioremap_resource(>dev, r);
+   rcpm->ippdexpcr_base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(rcpm->ippdexpcr_base)) {
ret =  PTR_ERR(rcpm->ippdexpcr_base);
return ret;
-- 
2.17.1



[PATCH 04/10] soc: zte: convert to devm_platform_ioremap_resource

2019-12-14 Thread Yangtao Li
Use devm_platform_ioremap_resource() to simplify code.

Signed-off-by: Yangtao Li 
---
 drivers/soc/zte/zx2967_pm_domains.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/soc/zte/zx2967_pm_domains.c 
b/drivers/soc/zte/zx2967_pm_domains.c
index a4503e31b616..9f2a274d2759 100644
--- a/drivers/soc/zte/zx2967_pm_domains.c
+++ b/drivers/soc/zte/zx2967_pm_domains.c
@@ -113,7 +113,6 @@ int zx2967_pd_probe(struct platform_device *pdev,
int domain_num)
 {
struct genpd_onecell_data *genpd_data;
-   struct resource *res;
int i;
 
genpd_data = devm_kzalloc(>dev, sizeof(*genpd_data), GFP_KERNEL);
@@ -123,8 +122,7 @@ int zx2967_pd_probe(struct platform_device *pdev,
genpd_data->domains = zx_pm_domains;
genpd_data->num_domains = domain_num;
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   pcubase = devm_ioremap_resource(>dev, res);
+   pcubase = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(pcubase))
return PTR_ERR(pcubase);
 
-- 
2.17.1



[PATCH 03/10] soc: amlogic: convert to devm_platform_ioremap_resource

2019-12-14 Thread Yangtao Li
Use devm_platform_ioremap_resource() to simplify code.

Signed-off-by: Yangtao Li 
---
 drivers/soc/amlogic/meson-canvas.c  | 4 +---
 drivers/soc/amlogic/meson-clk-measure.c | 4 +---
 2 files changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/soc/amlogic/meson-canvas.c 
b/drivers/soc/amlogic/meson-canvas.c
index c655f5f92b12..561044063319 100644
--- a/drivers/soc/amlogic/meson-canvas.c
+++ b/drivers/soc/amlogic/meson-canvas.c
@@ -166,7 +166,6 @@ EXPORT_SYMBOL_GPL(meson_canvas_free);
 
 static int meson_canvas_probe(struct platform_device *pdev)
 {
-   struct resource *res;
struct meson_canvas *canvas;
struct device *dev = >dev;
 
@@ -174,8 +173,7 @@ static int meson_canvas_probe(struct platform_device *pdev)
if (!canvas)
return -ENOMEM;
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   canvas->reg_base = devm_ioremap_resource(dev, res);
+   canvas->reg_base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(canvas->reg_base))
return PTR_ERR(canvas->reg_base);
 
diff --git a/drivers/soc/amlogic/meson-clk-measure.c 
b/drivers/soc/amlogic/meson-clk-measure.c
index 0fa47d77577d..173baa53fce3 100644
--- a/drivers/soc/amlogic/meson-clk-measure.c
+++ b/drivers/soc/amlogic/meson-clk-measure.c
@@ -605,7 +605,6 @@ static int meson_msr_probe(struct platform_device *pdev)
 {
const struct meson_msr_id *match_data;
struct meson_msr *priv;
-   struct resource *res;
struct dentry *root, *clks;
void __iomem *base;
int i;
@@ -623,8 +622,7 @@ static int meson_msr_probe(struct platform_device *pdev)
 
memcpy(priv->msr_table, match_data, sizeof(priv->msr_table));
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   base = devm_ioremap_resource(>dev, res);
+   base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(base)) {
dev_err(>dev, "io resource mapping failed\n");
return PTR_ERR(base);
-- 
2.17.1



[PATCH 01/10] soc: sunxi: convert to devm_platform_ioremap_resource

2019-12-14 Thread Yangtao Li
Use devm_platform_ioremap_resource() to simplify code.

Signed-off-by: Yangtao Li 
---
 drivers/soc/sunxi/sunxi_sram.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/soc/sunxi/sunxi_sram.c b/drivers/soc/sunxi/sunxi_sram.c
index 1b0d50f36349..f73fbcc73f51 100644
--- a/drivers/soc/sunxi/sunxi_sram.c
+++ b/drivers/soc/sunxi/sunxi_sram.c
@@ -320,7 +320,6 @@ static struct regmap_config sunxi_sram_emac_clock_regmap = {
 
 static int sunxi_sram_probe(struct platform_device *pdev)
 {
-   struct resource *res;
struct dentry *d;
struct regmap *emac_clock;
const struct sunxi_sramc_variant *variant;
@@ -331,8 +330,7 @@ static int sunxi_sram_probe(struct platform_device *pdev)
if (!variant)
return -EINVAL;
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   base = devm_ioremap_resource(>dev, res);
+   base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(base))
return PTR_ERR(base);
 
-- 
2.17.1



[PATCH 02/10] soc: samsung: convert to devm_platform_ioremap_resource

2019-12-14 Thread Yangtao Li
Use devm_platform_ioremap_resource() to simplify code.

Signed-off-by: Yangtao Li 
---
 drivers/soc/samsung/exynos-pmu.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/soc/samsung/exynos-pmu.c b/drivers/soc/samsung/exynos-pmu.c
index d34ca201b8b7..7da2701c871a 100644
--- a/drivers/soc/samsung/exynos-pmu.c
+++ b/drivers/soc/samsung/exynos-pmu.c
@@ -110,10 +110,8 @@ EXPORT_SYMBOL_GPL(exynos_get_pmu_regmap);
 static int exynos_pmu_probe(struct platform_device *pdev)
 {
struct device *dev = >dev;
-   struct resource *res;
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   pmu_base_addr = devm_ioremap_resource(dev, res);
+   pmu_base_addr = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(pmu_base_addr))
return PTR_ERR(pmu_base_addr);
 
-- 
2.17.1



[PATCH] cpufreq: powernv: fix missing check of return value in init_powernv_pstates()

2019-02-16 Thread Yangtao Li
kmalloc() could fail, so insert a check of its return value. And
if it fails, returns -ENOMEM.

And remove (struct pstate_idx_revmap_data *) to fix coccinelle WARNING
by the way.

WARNING: casting value returned by memory allocation function to (struct
pstate_idx_revmap_data *) is useless.

Signed-off-by: Yangtao Li 
---
 drivers/cpufreq/powernv-cpufreq.c | 10 +++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/cpufreq/powernv-cpufreq.c 
b/drivers/cpufreq/powernv-cpufreq.c
index 7e7ad3879c4e..d2230812fa4b 100644
--- a/drivers/cpufreq/powernv-cpufreq.c
+++ b/drivers/cpufreq/powernv-cpufreq.c
@@ -244,6 +244,7 @@ static int init_powernv_pstates(void)
u32 len_ids, len_freqs;
u32 pstate_min, pstate_max, pstate_nominal;
u32 pstate_turbo, pstate_ultra_turbo;
+   int rc = -ENODEV;
 
power_mgt = of_find_node_by_path("/ibm,opal/power-mgt");
if (!power_mgt) {
@@ -327,8 +328,11 @@ static int init_powernv_pstates(void)
powernv_freqs[i].frequency = freq * 1000; /* kHz */
powernv_freqs[i].driver_data = id & 0xFF;
 
-   revmap_data = (struct pstate_idx_revmap_data *)
- kmalloc(sizeof(*revmap_data), GFP_KERNEL);
+   revmap_data = kmalloc(sizeof(*revmap_data), GFP_KERNEL);
+   if (!revmap_data) {
+   rc = -ENOMEM;
+   goto out;
+   }
 
revmap_data->pstate_id = id & 0xFF;
revmap_data->cpufreq_table_idx = i;
@@ -357,7 +361,7 @@ static int init_powernv_pstates(void)
return 0;
 out:
of_node_put(power_mgt);
-   return -ENODEV;
+   return rc;
 }
 
 /* Returns the CPU frequency corresponding to the pstate_id. */
-- 
2.17.0



[PATCH v2] cpufreq: pmac64: add of_node_put()

2018-11-23 Thread Yangtao Li
of_find_node_by_path() acquires a reference to the node
returned by it and that reference needs to be dropped by its caller.
g5_neo2_cpufreq_init() doesn't do that, so fix it.

Signed-off-by: Yangtao Li 
Acked-by: Viresh Kumar 
---
Changes in v2:
-update changelog
---
 drivers/cpufreq/pmac64-cpufreq.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/cpufreq/pmac64-cpufreq.c b/drivers/cpufreq/pmac64-cpufreq.c
index be623dd7b9f2..1d32a863332d 100644
--- a/drivers/cpufreq/pmac64-cpufreq.c
+++ b/drivers/cpufreq/pmac64-cpufreq.c
@@ -411,6 +411,7 @@ static int __init g5_neo2_cpufreq_init(struct device_node 
*cpunode)
pfunc_set_vdnap0 = pmf_find_function(root, "set-vdnap0");
pfunc_vdnap0_complete =
pmf_find_function(root, "slewing-done");
+   of_node_put(root);
if (pfunc_set_vdnap0 == NULL ||
pfunc_vdnap0_complete == NULL) {
pr_err("Can't find required platform function\n");
-- 
2.17.0



[PATCH] leds: powernv: add of_node_put()

2018-11-21 Thread Yangtao Li
of_find_node_by_path() acquires a reference to the node returned by
it and that reference needs to be dropped by its caller.bl_idle_init()
doesn't do that, so fix it.

Signed-off-by: Yangtao Li 
---
 drivers/leds/leds-powernv.c | 12 +---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/leds/leds-powernv.c b/drivers/leds/leds-powernv.c
index b1adbd70ce2e..0b1540029034 100644
--- a/drivers/leds/leds-powernv.c
+++ b/drivers/leds/leds-powernv.c
@@ -285,6 +285,7 @@ static int powernv_led_probe(struct platform_device *pdev)
struct device_node *led_node;
struct powernv_led_common *powernv_led_common;
struct device *dev = >dev;
+   int rc;
 
led_node = of_find_node_by_path("/ibm,opal/leds");
if (!led_node) {
@@ -295,15 +296,20 @@ static int powernv_led_probe(struct platform_device *pdev)
 
powernv_led_common = devm_kzalloc(dev, sizeof(*powernv_led_common),
  GFP_KERNEL);
-   if (!powernv_led_common)
-   return -ENOMEM;
+   if (!powernv_led_common){
+   rc = -ENOMEM;
+   goto out;
+   }
 
mutex_init(_led_common->lock);
powernv_led_common->max_led_type = cpu_to_be64(OPAL_SLOT_LED_TYPE_MAX);
 
platform_set_drvdata(pdev, powernv_led_common);
 
-   return powernv_led_classdev(pdev, led_node, powernv_led_common);
+   rc = powernv_led_classdev(pdev, led_node, powernv_led_common);
+out:
+   of_node_put(led_node);
+   return rc;
 }
 
 /* Platform driver remove */
-- 
2.17.0



[PATCH v2] cpufreq: powernv: add of_node_put()

2018-11-20 Thread Yangtao Li
The of_find_node_by_path() returns a node pointer with refcount
incremented,but there is the lack of use of the of_node_put() when
done.Add the missing of_node_put() to release the refcount.

Signed-off-by: Yangtao Li 
---
Changes in v2
-update changelog
---
 drivers/cpufreq/powernv-cpufreq.c | 17 +++--
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/drivers/cpufreq/powernv-cpufreq.c 
b/drivers/cpufreq/powernv-cpufreq.c
index bf6519cf64bc..7e7ad3879c4e 100644
--- a/drivers/cpufreq/powernv-cpufreq.c
+++ b/drivers/cpufreq/powernv-cpufreq.c
@@ -253,18 +253,18 @@ static int init_powernv_pstates(void)
 
if (of_property_read_u32(power_mgt, "ibm,pstate-min", _min)) {
pr_warn("ibm,pstate-min node not found\n");
-   return -ENODEV;
+   goto out;
}
 
if (of_property_read_u32(power_mgt, "ibm,pstate-max", _max)) {
pr_warn("ibm,pstate-max node not found\n");
-   return -ENODEV;
+   goto out;
}
 
if (of_property_read_u32(power_mgt, "ibm,pstate-nominal",
 _nominal)) {
pr_warn("ibm,pstate-nominal not found\n");
-   return -ENODEV;
+   goto out;
}
 
if (of_property_read_u32(power_mgt, "ibm,pstate-ultra-turbo",
@@ -293,14 +293,14 @@ static int init_powernv_pstates(void)
pstate_ids = of_get_property(power_mgt, "ibm,pstate-ids", _ids);
if (!pstate_ids) {
pr_warn("ibm,pstate-ids not found\n");
-   return -ENODEV;
+   goto out;
}
 
pstate_freqs = of_get_property(power_mgt, "ibm,pstate-frequencies-mhz",
  _freqs);
if (!pstate_freqs) {
pr_warn("ibm,pstate-frequencies-mhz not found\n");
-   return -ENODEV;
+   goto out;
}
 
if (len_ids != len_freqs) {
@@ -311,7 +311,7 @@ static int init_powernv_pstates(void)
nr_pstates = min(len_ids, len_freqs) / sizeof(u32);
if (!nr_pstates) {
pr_warn("No PStates found\n");
-   return -ENODEV;
+   goto out;
}
 
powernv_pstate_info.nr_pstates = nr_pstates;
@@ -352,7 +352,12 @@ static int init_powernv_pstates(void)
 
/* End of list marker entry */
powernv_freqs[i].frequency = CPUFREQ_TABLE_END;
+
+   of_node_put(power_mgt);
return 0;
+out:
+   of_node_put(power_mgt);
+   return -ENODEV;
 }
 
 /* Returns the CPU frequency corresponding to the pstate_id. */
-- 
2.17.0



[PATCH] ide: pmac: add of_node_put()

2018-11-20 Thread Yangtao Li
use of_node_put() to release the refcount.

Signed-off-by: Yangtao Li 
---
 drivers/ide/pmac.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/ide/pmac.c b/drivers/ide/pmac.c
index c5b902b86b44..203ed4adc04a 100644
--- a/drivers/ide/pmac.c
+++ b/drivers/ide/pmac.c
@@ -920,6 +920,7 @@ static u8 pmac_ide_cable_detect(ide_hwif_t *hwif)
struct device_node *root = of_find_node_by_path("/");
const char *model = of_get_property(root, "model", NULL);
 
+   of_node_put(root);
/* Get cable type from device-tree. */
if (cable && !strncmp(cable, "80-", 3)) {
/* Some drives fail to detect 80c cable in PowerBook */
-- 
2.17.0



[PATCH] cpufreq: powernv: add of_node_put()

2018-11-20 Thread Yangtao Li
use of_node_put() to release the refcount.

Signed-off-by: Yangtao Li 
---
 drivers/cpufreq/powernv-cpufreq.c | 17 +++--
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/drivers/cpufreq/powernv-cpufreq.c 
b/drivers/cpufreq/powernv-cpufreq.c
index bf6519cf64bc..7e7ad3879c4e 100644
--- a/drivers/cpufreq/powernv-cpufreq.c
+++ b/drivers/cpufreq/powernv-cpufreq.c
@@ -253,18 +253,18 @@ static int init_powernv_pstates(void)
 
if (of_property_read_u32(power_mgt, "ibm,pstate-min", _min)) {
pr_warn("ibm,pstate-min node not found\n");
-   return -ENODEV;
+   goto out;
}
 
if (of_property_read_u32(power_mgt, "ibm,pstate-max", _max)) {
pr_warn("ibm,pstate-max node not found\n");
-   return -ENODEV;
+   goto out;
}
 
if (of_property_read_u32(power_mgt, "ibm,pstate-nominal",
 _nominal)) {
pr_warn("ibm,pstate-nominal not found\n");
-   return -ENODEV;
+   goto out;
}
 
if (of_property_read_u32(power_mgt, "ibm,pstate-ultra-turbo",
@@ -293,14 +293,14 @@ static int init_powernv_pstates(void)
pstate_ids = of_get_property(power_mgt, "ibm,pstate-ids", _ids);
if (!pstate_ids) {
pr_warn("ibm,pstate-ids not found\n");
-   return -ENODEV;
+   goto out;
}
 
pstate_freqs = of_get_property(power_mgt, "ibm,pstate-frequencies-mhz",
  _freqs);
if (!pstate_freqs) {
pr_warn("ibm,pstate-frequencies-mhz not found\n");
-   return -ENODEV;
+   goto out;
}
 
if (len_ids != len_freqs) {
@@ -311,7 +311,7 @@ static int init_powernv_pstates(void)
nr_pstates = min(len_ids, len_freqs) / sizeof(u32);
if (!nr_pstates) {
pr_warn("No PStates found\n");
-   return -ENODEV;
+   goto out;
}
 
powernv_pstate_info.nr_pstates = nr_pstates;
@@ -352,7 +352,12 @@ static int init_powernv_pstates(void)
 
/* End of list marker entry */
powernv_freqs[i].frequency = CPUFREQ_TABLE_END;
+
+   of_node_put(power_mgt);
return 0;
+out:
+   of_node_put(power_mgt);
+   return -ENODEV;
 }
 
 /* Returns the CPU frequency corresponding to the pstate_id. */
-- 
2.17.0



[PATCH] cpufreq: pmac64: add of_node_put()

2018-11-20 Thread Yangtao Li
use of_node_put to release the refcount of node.

Signed-off-by: Yangtao Li 
---
 drivers/cpufreq/pmac64-cpufreq.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/cpufreq/pmac64-cpufreq.c b/drivers/cpufreq/pmac64-cpufreq.c
index be623dd7b9f2..1d32a863332d 100644
--- a/drivers/cpufreq/pmac64-cpufreq.c
+++ b/drivers/cpufreq/pmac64-cpufreq.c
@@ -411,6 +411,7 @@ static int __init g5_neo2_cpufreq_init(struct device_node 
*cpunode)
pfunc_set_vdnap0 = pmf_find_function(root, "set-vdnap0");
pfunc_vdnap0_complete =
pmf_find_function(root, "slewing-done");
+   of_node_put(root);
if (pfunc_set_vdnap0 == NULL ||
pfunc_vdnap0_complete == NULL) {
pr_err("Can't find required platform function\n");
-- 
2.17.0



[PATCH] powerpc/vas: Change to use DEFINE_SHOW_ATTRIBUTE macro

2018-11-06 Thread Yangtao Li
Use DEFINE_SHOW_ATTRIBUTE macro to simplify the code.

Signed-off-by: Yangtao Li 
---
 arch/powerpc/platforms/powernv/vas-debug.c | 28 --
 1 file changed, 4 insertions(+), 24 deletions(-)

diff --git a/arch/powerpc/platforms/powernv/vas-debug.c 
b/arch/powerpc/platforms/powernv/vas-debug.c
index 4f7276ebdf9c..4d3929fbc08f 100644
--- a/arch/powerpc/platforms/powernv/vas-debug.c
+++ b/arch/powerpc/platforms/powernv/vas-debug.c
@@ -30,7 +30,7 @@ static char *cop_to_str(int cop)
}
 }
 
-static int info_dbg_show(struct seq_file *s, void *private)
+static int info_show(struct seq_file *s, void *private)
 {
struct vas_window *window = s->private;
 
@@ -49,17 +49,7 @@ static int info_dbg_show(struct seq_file *s, void *private)
return 0;
 }
 
-static int info_dbg_open(struct inode *inode, struct file *file)
-{
-   return single_open(file, info_dbg_show, inode->i_private);
-}
-
-static const struct file_operations info_fops = {
-   .open   = info_dbg_open,
-   .read   = seq_read,
-   .llseek = seq_lseek,
-   .release= single_release,
-};
+DEFINE_SHOW_ATTRIBUTE(info);
 
 static inline void print_reg(struct seq_file *s, struct vas_window *win,
char *name, u32 reg)
@@ -67,7 +57,7 @@ static inline void print_reg(struct seq_file *s, struct 
vas_window *win,
seq_printf(s, "0x%016llx %s\n", read_hvwc_reg(win, name, reg), name);
 }
 
-static int hvwc_dbg_show(struct seq_file *s, void *private)
+static int hvwc_show(struct seq_file *s, void *private)
 {
struct vas_window *window = s->private;
 
@@ -115,17 +105,7 @@ static int hvwc_dbg_show(struct seq_file *s, void *private)
return 0;
 }
 
-static int hvwc_dbg_open(struct inode *inode, struct file *file)
-{
-   return single_open(file, hvwc_dbg_show, inode->i_private);
-}
-
-static const struct file_operations hvwc_fops = {
-   .open   = hvwc_dbg_open,
-   .read   = seq_read,
-   .llseek = seq_lseek,
-   .release= single_release,
-};
+DEFINE_SHOW_ATTRIBUTE(hvwc);
 
 void vas_window_free_dbgdir(struct vas_window *window)
 {
-- 
2.17.0



[PATCH] powerpc/fadump: Change to use DEFINE_SHOW_ATTRIBUTE macro

2018-11-05 Thread Yangtao Li
Use DEFINE_SHOW_ATTRIBUTE macro to simplify the code.

Signed-off-by: Yangtao Li 
---
 arch/powerpc/kernel/fadump.c | 12 +---
 1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/arch/powerpc/kernel/fadump.c b/arch/powerpc/kernel/fadump.c
index a711d22339ea..2df5e04b5afc 100644
--- a/arch/powerpc/kernel/fadump.c
+++ b/arch/powerpc/kernel/fadump.c
@@ -1531,17 +1531,7 @@ static struct kobj_attribute fadump_register_attr = 
__ATTR(fadump_registered,
0644, fadump_register_show,
fadump_register_store);
 
-static int fadump_region_open(struct inode *inode, struct file *file)
-{
-   return single_open(file, fadump_region_show, inode->i_private);
-}
-
-static const struct file_operations fadump_region_fops = {
-   .open= fadump_region_open,
-   .read= seq_read,
-   .llseek  = seq_lseek,
-   .release = single_release,
-};
+DEFINE_SHOW_ATTRIBUTE(fadump_region);
 
 static void fadump_init_files(void)
 {
-- 
2.17.0



[PATCH] KVM: PPC: Book3S HV: Change to use DEFINE_SHOW_ATTRIBUTE macro

2018-11-05 Thread Yangtao Li
Use DEFINE_SHOW_ATTRIBUTE macro to simplify the code.

Signed-off-by: Yangtao Li 
---
 arch/powerpc/kvm/book3s_xics.c | 12 +---
 arch/powerpc/kvm/book3s_xive.c | 12 +---
 2 files changed, 2 insertions(+), 22 deletions(-)

diff --git a/arch/powerpc/kvm/book3s_xics.c b/arch/powerpc/kvm/book3s_xics.c
index b8356cdc0c04..8fdc8eb77039 100644
--- a/arch/powerpc/kvm/book3s_xics.c
+++ b/arch/powerpc/kvm/book3s_xics.c
@@ -1017,17 +1017,7 @@ static int xics_debug_show(struct seq_file *m, void 
*private)
return 0;
 }
 
-static int xics_debug_open(struct inode *inode, struct file *file)
-{
-   return single_open(file, xics_debug_show, inode->i_private);
-}
-
-static const struct file_operations xics_debug_fops = {
-   .open = xics_debug_open,
-   .read = seq_read,
-   .llseek = seq_lseek,
-   .release = single_release,
-};
+DEFINE_SHOW_ATTRIBUTE(xics_debug);
 
 static void xics_debugfs_init(struct kvmppc_xics *xics)
 {
diff --git a/arch/powerpc/kvm/book3s_xive.c b/arch/powerpc/kvm/book3s_xive.c
index 30c2eb766954..57ef1502a52c 100644
--- a/arch/powerpc/kvm/book3s_xive.c
+++ b/arch/powerpc/kvm/book3s_xive.c
@@ -1905,17 +1905,7 @@ static int xive_debug_show(struct seq_file *m, void 
*private)
return 0;
 }
 
-static int xive_debug_open(struct inode *inode, struct file *file)
-{
-   return single_open(file, xive_debug_show, inode->i_private);
-}
-
-static const struct file_operations xive_debug_fops = {
-   .open = xive_debug_open,
-   .read = seq_read,
-   .llseek = seq_lseek,
-   .release = single_release,
-};
+DEFINE_SHOW_ATTRIBUTE(xive_debug);
 
 static void xive_debugfs_init(struct kvmppc_xive *xive)
 {
-- 
2.17.0



[PATCH] ASoC: fsl_ssi: Change to use DEFINE_SHOW_ATTRIBUTE macro

2018-11-05 Thread Yangtao Li
Use DEFINE_SHOW_ATTRIBUTE macro to simplify the code.

Signed-off-by: Yangtao Li 
---
 sound/soc/fsl/fsl_ssi_dbg.c | 14 ++
 1 file changed, 2 insertions(+), 12 deletions(-)

diff --git a/sound/soc/fsl/fsl_ssi_dbg.c b/sound/soc/fsl/fsl_ssi_dbg.c
index 1255dfe19eef..6f6294149476 100644
--- a/sound/soc/fsl/fsl_ssi_dbg.c
+++ b/sound/soc/fsl/fsl_ssi_dbg.c
@@ -124,17 +124,7 @@ static int fsl_ssi_stats_show(struct seq_file *s, void 
*unused)
return 0;
 }
 
-static int fsl_ssi_stats_open(struct inode *inode, struct file *file)
-{
-   return single_open(file, fsl_ssi_stats_show, inode->i_private);
-}
-
-static const struct file_operations fsl_ssi_stats_ops = {
-   .open = fsl_ssi_stats_open,
-   .read = seq_read,
-   .llseek = seq_lseek,
-   .release = single_release,
-};
+DEFINE_SHOW_ATTRIBUTE(fsl_ssi_stats);
 
 int fsl_ssi_debugfs_create(struct fsl_ssi_dbg *ssi_dbg, struct device *dev)
 {
@@ -144,7 +134,7 @@ int fsl_ssi_debugfs_create(struct fsl_ssi_dbg *ssi_dbg, 
struct device *dev)
 
ssi_dbg->dbg_stats = debugfs_create_file("stats", 0444,
 ssi_dbg->dbg_dir, ssi_dbg,
-_ssi_stats_ops);
+_ssi_stats_fops);
if (!ssi_dbg->dbg_stats) {
debugfs_remove(ssi_dbg->dbg_dir);
return -ENOMEM;
-- 
2.17.0