diff options
author | Ryo Kataoka <ryo.kataoka.wt@renesas.com> | 2019-06-11 11:06:01 +0900 |
---|---|---|
committer | Ryo Kataoka <ryo.kataoka.wt@renesas.com> | 2019-06-11 11:06:01 +0900 |
commit | 6a19e34ad5285672703d18bec8cc93cd3debe7a5 (patch) | |
tree | 072cb75d9e76fd7870cacf99506a8ed562570979 | |
parent | 9a5d1049dfcacb1366b3b50593f19ae44f63e5aa (diff) | |
parent | 9de2c502a2f46549215eb7f9a6f1e477fe5eacaa (diff) | |
download | renesas-bsp-v4.14.75-ltsi/rcar-3.9.5.tar.gz |
Merge branch 'rcar-3.9.4/thermal.rc1' into v4.14.75-ltsi/rcar-3.9.5rcar-3.9.5v4.14.75-ltsi/rcar-3.9.5
* rcar-3.9.4/thermal.rc1:
thermal: rcar_gen3_thermal: fix interrupt type
thermal: rcar_gen3_thermal: Fix init value of IRQCTL register
thermal: rcar_gen3_thermal: disable interrupt in .remove
-rw-r--r-- | drivers/thermal/rcar_gen3_thermal.c | 48 |
1 files changed, 12 insertions, 36 deletions
diff --git a/drivers/thermal/rcar_gen3_thermal.c b/drivers/thermal/rcar_gen3_thermal.c index ae17e73d770b96..bba6af707aec47 100644 --- a/drivers/thermal/rcar_gen3_thermal.c +++ b/drivers/thermal/rcar_gen3_thermal.c @@ -24,7 +24,6 @@ #include <linux/of_device.h> #include <linux/platform_device.h> #include <linux/pm_runtime.h> -#include <linux/spinlock.h> #include <linux/sys_soc.h> #include <linux/thermal.h> #include <linux/of.h> @@ -145,7 +144,6 @@ struct rcar_gen3_thermal_tsc { struct rcar_gen3_thermal_priv { struct rcar_gen3_thermal_tsc *tscs[TSC_MAX_NUM]; unsigned int num_tscs; - spinlock_t lock; /* Protect interrupts on and off */ void (*thermal_init)(struct rcar_gen3_thermal_tsc *tsc); }; @@ -397,9 +395,7 @@ static irqreturn_t rcar_gen3_thermal_irq(int irq, void *data) { struct rcar_gen3_thermal_priv *priv = data; u32 status; - int i, ret = IRQ_HANDLED; - - spin_lock(&priv->lock); + int i; if (is_ths_typeA) { for (i = 0; i < priv->num_tscs; i++) { @@ -408,7 +404,8 @@ static irqreturn_t rcar_gen3_thermal_irq(int irq, void *data) rcar_gen3_thermal_write(priv->tscs[i], REG_GEN3_IRQSTR, 0); if (status) - ret = IRQ_WAKE_THREAD; + thermal_zone_device_update(priv->tscs[i]->zone, + THERMAL_EVENT_UNSPECIFIED); } } else { for (i = 0; i < priv->num_tscs; i++) { @@ -417,34 +414,11 @@ static irqreturn_t rcar_gen3_thermal_irq(int irq, void *data) rcar_gen3_thermal_write(priv->tscs[i], REG_GEN3_B_STR, 0); if (status) - ret = IRQ_WAKE_THREAD; + thermal_zone_device_update(priv->tscs[i]->zone, + THERMAL_EVENT_UNSPECIFIED); } } - if (ret == IRQ_WAKE_THREAD) - rcar_thermal_irq_set(priv, false); - - spin_unlock(&priv->lock); - - return ret; -} - -static irqreturn_t rcar_gen3_thermal_irq_thread(int irq, void *data) -{ - struct rcar_gen3_thermal_priv *priv = data; - unsigned long flags; - int i; - - for (i = 0; i < priv->num_tscs; i++) { - rcar_gen3_thermal_set_irq_temp(priv->tscs[i]); - thermal_zone_device_update(priv->tscs[i]->zone, - THERMAL_EVENT_UNSPECIFIED); - } - - spin_lock_irqsave(&priv->lock, flags); - rcar_thermal_irq_set(priv, true); - spin_unlock_irqrestore(&priv->lock, flags); - return IRQ_HANDLED; } @@ -501,7 +475,7 @@ static void rcar_gen3_thermal_init(struct rcar_gen3_thermal_tsc *tsc) usleep_range(1000, 2000); - rcar_gen3_thermal_write(tsc, REG_GEN3_IRQCTL, 0x3F); + rcar_gen3_thermal_write(tsc, REG_GEN3_IRQCTL, 0); rcar_gen3_thermal_write(tsc, REG_GEN3_IRQMSK, 0); rcar_gen3_thermal_write(tsc, REG_GEN3_IRQEN, IRQ_TEMPD1 | IRQ_TEMP2); @@ -524,6 +498,9 @@ MODULE_DEVICE_TABLE(of, rcar_gen3_thermal_dt_ids); static int rcar_gen3_thermal_remove(struct platform_device *pdev) { struct device *dev = &pdev->dev; + struct rcar_gen3_thermal_priv *priv = dev_get_drvdata(dev); + + rcar_thermal_irq_set(priv, false); pm_runtime_put(dev); pm_runtime_disable(dev); @@ -596,7 +573,6 @@ static int rcar_gen3_thermal_probe(struct platform_device *pdev) iounmap(ptat_base); } - spin_lock_init(&priv->lock); platform_set_drvdata(pdev, priv); @@ -615,9 +591,9 @@ static int rcar_gen3_thermal_probe(struct platform_device *pdev) if (!irqname) return -ENOMEM; - ret = devm_request_threaded_irq(dev, irq, rcar_gen3_thermal_irq, - rcar_gen3_thermal_irq_thread, - IRQF_SHARED, irqname, priv); + ret = devm_request_threaded_irq(dev, irq, NULL, + rcar_gen3_thermal_irq, + IRQF_ONESHOT, irqname, priv); if (ret) return ret; } |