Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1653839 > unrolled thread
| Started by | sathyanarayanan.kuppuswamy@linux.intel.com |
|---|---|
| First post | 2017-05-31 07:30 +0200 |
| Last post | 2017-05-31 07:30 +0200 |
| Articles | 7 — 1 participant |
Back to article view | Back to linux.kernel
[PATCH v4 0/9] WCOVE chained IRQ fix sathyanarayanan.kuppuswamy@linux.intel.com - 2017-05-31 07:30 +0200
[PATCH v4 3/9] thermal: intel_bxt_pmic_thermal: use first level PMIC thermal irq sathyanarayanan.kuppuswamy@linux.intel.com - 2017-05-31 07:30 +0200
[PATCH v4 6/9] mfd: intel_soc_pmic_bxtwc: utilize devm_* functions in driver probe sathyanarayanan.kuppuswamy@linux.intel.com - 2017-05-31 07:30 +0200
[PATCH v4 5/9] gpio: gpio-wcove: use first level PMIC GPIO irq sathyanarayanan.kuppuswamy@linux.intel.com - 2017-05-31 07:30 +0200
[PATCH v4 1/9] mfd: intel_soc_pmic_bxtwc: fix TMU interrupt index sathyanarayanan.kuppuswamy@linux.intel.com - 2017-05-31 07:30 +0200
[PATCH v4 9/9] usb: typec: typec_wcove: Use charger irq chip to get usbc virq sathyanarayanan.kuppuswamy@linux.intel.com - 2017-05-31 07:30 +0200
[PATCH v4 4/9] mfd: intel_soc_pmic_bxtwc: remove second level irq for gpio device sathyanarayanan.kuppuswamy@linux.intel.com - 2017-05-31 07:30 +0200
| From | sathyanarayanan.kuppuswamy@linux.intel.com |
|---|---|
| Date | 2017-05-31 07:30 +0200 |
| Subject | [PATCH v4 0/9] WCOVE chained IRQ fix |
| Message-ID | <tN4mJ-vv-3@gated-at.bofh.it> |
From: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com> Following patch set fixes the chained IRQ issue observed in WCOVE PMIC driver. Changes since v3: * Added fix for typec wcove driver. Kuppuswamy Sathyanarayanan (9): mfd: intel_soc_pmic_bxtwc: fix TMU interrupt index mfd: intel_soc_pmic_bxtwc: remove thermal second level irqs thermal: intel_bxt_pmic_thermal: use first level PMIC thermal irq mfd: intel_soc_pmic_bxtwc: remove second level irq for gpio device gpio: gpio-wcove: use first level PMIC GPIO irq mfd: intel_soc_pmic_bxtwc: utilize devm_* functions in driver probe mfd: intel_soc_pmic_bxtwc: use chained irqs for second level irq chips platform: x86: intel_bxtwc_tmu: remove first level irq unmask usb: typec: typec_wcove: Use charger irq chip to get usbc virq drivers/gpio/gpio-wcove.c | 14 +- drivers/mfd/intel_soc_pmic_bxtwc.c | 234 ++++++++++++++++++++----------- drivers/platform/x86/intel_bxtwc_tmu.c | 4 - drivers/thermal/intel_bxt_pmic_thermal.c | 2 +- drivers/usb/typec/typec_wcove.c | 2 +- include/linux/mfd/intel_soc_pmic.h | 5 +- 6 files changed, 175 insertions(+), 86 deletions(-) -- 2.7.4
[toc] | [next] | [standalone]
| From | sathyanarayanan.kuppuswamy@linux.intel.com |
|---|---|
| Date | 2017-05-31 07:30 +0200 |
| Subject | [PATCH v4 3/9] thermal: intel_bxt_pmic_thermal: use first level PMIC thermal irq |
| Message-ID | <tN4mK-vv-7@gated-at.bofh.it> |
| In reply to | #1653839 |
From: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
PMIC mfd driver only exports first level irq for thermal device.
But currently we are reading the irqs from the second level irq
chip, So this patch fixes this issue by adding support to use
first level PMIC thermal irq.
Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
Acked-by: Zhang Rui <rui.zhang@intel.com>
---
drivers/thermal/intel_bxt_pmic_thermal.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Changes since v1:
* None
Changes since v2:
* Rebased on top of latest release.
Changes since v3:
* Rebased on top of latest release.
diff --git a/drivers/thermal/intel_bxt_pmic_thermal.c b/drivers/thermal/intel_bxt_pmic_thermal.c
index 0f19a39..ef6b322 100644
--- a/drivers/thermal/intel_bxt_pmic_thermal.c
+++ b/drivers/thermal/intel_bxt_pmic_thermal.c
@@ -241,7 +241,7 @@ static int pmic_thermal_probe(struct platform_device *pdev)
}
regmap = pmic->regmap;
- regmap_irq_chip = pmic->irq_chip_data_level2;
+ regmap_irq_chip = pmic->irq_chip_data;
pmic_irq_count = 0;
while ((irq = platform_get_irq(pdev, pmic_irq_count)) != -ENXIO) {
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | sathyanarayanan.kuppuswamy@linux.intel.com |
|---|---|
| Date | 2017-05-31 07:30 +0200 |
| Subject | [PATCH v4 6/9] mfd: intel_soc_pmic_bxtwc: utilize devm_* functions in driver probe |
| Message-ID | <tN4mK-vv-11@gated-at.bofh.it> |
| In reply to | #1653839 |
From: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
Cleanup the resource allocation/free code in probe function by using
devm_* calls.
Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org>
---
drivers/mfd/intel_soc_pmic_bxtwc.c | 54 +++++++++++++-------------------------
1 file changed, 18 insertions(+), 36 deletions(-)
Changes since v1:
* None
Changes since v2:
* Rebased on top of latest release.
Changes since v3:
* None
diff --git a/drivers/mfd/intel_soc_pmic_bxtwc.c b/drivers/mfd/intel_soc_pmic_bxtwc.c
index af11c43..feeda6e 100644
--- a/drivers/mfd/intel_soc_pmic_bxtwc.c
+++ b/drivers/mfd/intel_soc_pmic_bxtwc.c
@@ -399,45 +399,44 @@ static int bxtwc_probe(struct platform_device *pdev)
return ret;
}
- ret = regmap_add_irq_chip(pmic->regmap, pmic->irq,
- IRQF_ONESHOT | IRQF_SHARED,
- 0, &bxtwc_regmap_irq_chip,
- &pmic->irq_chip_data);
+ ret = devm_regmap_add_irq_chip(&pdev->dev, pmic->regmap, pmic->irq,
+ IRQF_ONESHOT | IRQF_SHARED,
+ 0, &bxtwc_regmap_irq_chip,
+ &pmic->irq_chip_data);
if (ret) {
dev_err(&pdev->dev, "Failed to add IRQ chip\n");
return ret;
}
- ret = regmap_add_irq_chip(pmic->regmap, pmic->irq,
- IRQF_ONESHOT | IRQF_SHARED,
- 0, &bxtwc_regmap_irq_chip_level2,
- &pmic->irq_chip_data_level2);
+ ret = devm_regmap_add_irq_chip(&pdev->dev, pmic->regmap, pmic->irq,
+ IRQF_ONESHOT | IRQF_SHARED,
+ 0, &bxtwc_regmap_irq_chip_level2,
+ &pmic->irq_chip_data_level2);
if (ret) {
dev_err(&pdev->dev, "Failed to add secondary IRQ chip\n");
- goto err_irq_chip_level2;
+ return ret;
}
- ret = regmap_add_irq_chip(pmic->regmap, pmic->irq,
- IRQF_ONESHOT | IRQF_SHARED,
- 0, &bxtwc_regmap_irq_chip_tmu,
- &pmic->irq_chip_data_tmu);
+ ret = devm_regmap_add_irq_chip(&pdev->dev, pmic->regmap, pmic->irq,
+ IRQF_ONESHOT | IRQF_SHARED,
+ 0, &bxtwc_regmap_irq_chip_tmu,
+ &pmic->irq_chip_data_tmu);
if (ret) {
dev_err(&pdev->dev, "Failed to add TMU IRQ chip\n");
- goto err_irq_chip_tmu;
+ return ret;
}
- ret = mfd_add_devices(&pdev->dev, PLATFORM_DEVID_NONE, bxt_wc_dev,
- ARRAY_SIZE(bxt_wc_dev), NULL, 0,
- NULL);
+ ret = devm_mfd_add_devices(&pdev->dev, PLATFORM_DEVID_NONE, bxt_wc_dev,
+ ARRAY_SIZE(bxt_wc_dev), NULL, 0, NULL);
if (ret) {
dev_err(&pdev->dev, "Failed to add devices\n");
- goto err_mfd;
+ return ret;
}
ret = sysfs_create_group(&pdev->dev.kobj, &bxtwc_group);
if (ret) {
dev_err(&pdev->dev, "Failed to create sysfs group %d\n", ret);
- goto err_sysfs;
+ return ret;
}
/*
@@ -451,28 +450,11 @@ static int bxtwc_probe(struct platform_device *pdev)
BXTWC_MIRQLVL1_MCHGR, 0);
return 0;
-
-err_sysfs:
- mfd_remove_devices(&pdev->dev);
-err_mfd:
- regmap_del_irq_chip(pmic->irq, pmic->irq_chip_data_tmu);
-err_irq_chip_tmu:
- regmap_del_irq_chip(pmic->irq, pmic->irq_chip_data_level2);
-err_irq_chip_level2:
- regmap_del_irq_chip(pmic->irq, pmic->irq_chip_data);
-
- return ret;
}
static int bxtwc_remove(struct platform_device *pdev)
{
- struct intel_soc_pmic *pmic = dev_get_drvdata(&pdev->dev);
-
sysfs_remove_group(&pdev->dev.kobj, &bxtwc_group);
- mfd_remove_devices(&pdev->dev);
- regmap_del_irq_chip(pmic->irq, pmic->irq_chip_data);
- regmap_del_irq_chip(pmic->irq, pmic->irq_chip_data_level2);
- regmap_del_irq_chip(pmic->irq, pmic->irq_chip_data_tmu);
return 0;
}
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | sathyanarayanan.kuppuswamy@linux.intel.com |
|---|---|
| Date | 2017-05-31 07:30 +0200 |
| Subject | [PATCH v4 5/9] gpio: gpio-wcove: use first level PMIC GPIO irq |
| Message-ID | <tN4mK-vv-13@gated-at.bofh.it> |
| In reply to | #1653839 |
From: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com> PMIC mfd driver only exports first level irq for GPIO device. But currently we are reading the irqs from the second level irq chip, So this patch fixes this issue by adding support to use first level PMIC GPIO irq. Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com> Acked-by: Linus Walleij <linus.walleij@linaro.org> --- drivers/gpio/gpio-wcove.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) Changes since v1: * used correct mask for GPIO0 and GPIO1 interrupts Changes since v2: * Rebased on top of latest release. * Removed IRQ0 and IRQ1 mask defines. Changes since v3: * None diff --git a/drivers/gpio/gpio-wcove.c b/drivers/gpio/gpio-wcove.c index 7b1bc20..bba7704 100644 --- a/drivers/gpio/gpio-wcove.c +++ b/drivers/gpio/gpio-wcove.c @@ -401,7 +401,7 @@ static int wcove_gpio_probe(struct platform_device *pdev) if (!wg) return -ENOMEM; - wg->regmap_irq_chip = pmic->irq_chip_data_level2; + wg->regmap_irq_chip = pmic->irq_chip_data; platform_set_drvdata(pdev, wg); @@ -449,6 +449,18 @@ static int wcove_gpio_probe(struct platform_device *pdev) gpiochip_set_nested_irqchip(&wg->chip, &wcove_irqchip, virq); + /* Enable GPIO0 interrupts */ + ret = regmap_update_bits(wg->regmap, IRQ_MASK_BASE, GPIO_IRQ0_MASK, + 0x00); + if (ret) + return ret; + + /* Enable GPIO1 interrupts */ + ret = regmap_update_bits(wg->regmap, IRQ_MASK_BASE + 1, GPIO_IRQ1_MASK, + 0x00); + if (ret) + return ret; + return 0; } -- 2.7.4
[toc] | [prev] | [next] | [standalone]
| From | sathyanarayanan.kuppuswamy@linux.intel.com |
|---|---|
| Date | 2017-05-31 07:30 +0200 |
| Subject | [PATCH v4 1/9] mfd: intel_soc_pmic_bxtwc: fix TMU interrupt index |
| Message-ID | <tN4mK-vv-15@gated-at.bofh.it> |
| In reply to | #1653839 |
From: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
TMU interrupts are registered as a separate interrupt chip, and
hence it should start its interrupt index(BXTWC_TMU_IRQ) number
from 0. But currently, BXTWC_TMU_IRQ is defined as part of enum
bxtwc_irqs_level2 and its index value is 11. Since this index
value is used when calculating .num_irqs of regmap_irq_chip_tmu,
it incorrectly reports number of irqs as 12 instead of actual
value of 1.
This patch fixes this issue by creating new enum of tmu irqs and
resetting its starting index to 0.
Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org>
---
drivers/mfd/intel_soc_pmic_bxtwc.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
Changes since v1:
* Removed code from commit message.
Changes since v2:
* Rebased on top of latest release.
Changes sinve v3:
* Rebased on top of latest release.
diff --git a/drivers/mfd/intel_soc_pmic_bxtwc.c b/drivers/mfd/intel_soc_pmic_bxtwc.c
index 8c3cbf6..7cbaf1e 100644
--- a/drivers/mfd/intel_soc_pmic_bxtwc.c
+++ b/drivers/mfd/intel_soc_pmic_bxtwc.c
@@ -95,7 +95,10 @@ enum bxtwc_irqs_level2 {
BXTWC_GPIO0_IRQ,
BXTWC_GPIO1_IRQ,
BXTWC_CRIT_IRQ,
- BXTWC_TMU_IRQ,
+};
+
+enum bxtwc_irqs_tmu {
+ BXTWC_TMU_IRQ = 0,
};
static const struct regmap_irq bxtwc_regmap_irqs[] = {
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | sathyanarayanan.kuppuswamy@linux.intel.com |
|---|---|
| Date | 2017-05-31 07:30 +0200 |
| Subject | [PATCH v4 9/9] usb: typec: typec_wcove: Use charger irq chip to get usbc virq |
| Message-ID | <tN4mK-vv-17@gated-at.bofh.it> |
| In reply to | #1653839 |
From: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com> Currently, in Whiskey cove PMIC driver, USBC IRQ is moved under charger level2 irq chip. So use irq_chip_data_chgr to get the USBC virtual IRQ number. Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com> --- drivers/usb/typec/typec_wcove.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Changes since v3: * Added typec fix. diff --git a/drivers/usb/typec/typec_wcove.c b/drivers/usb/typec/typec_wcove.c index d5a7b21..00a4bd2 100644 --- a/drivers/usb/typec/typec_wcove.c +++ b/drivers/usb/typec/typec_wcove.c @@ -303,7 +303,7 @@ static int wcove_typec_probe(struct platform_device *pdev) wcove->dev = &pdev->dev; wcove->regmap = pmic->regmap; - ret = regmap_irq_get_virq(pmic->irq_chip_data_level2, + ret = regmap_irq_get_virq(pmic->irq_chip_data_chgr, platform_get_irq(pdev, 0)); if (ret < 0) return ret; -- 2.7.4
[toc] | [prev] | [next] | [standalone]
| From | sathyanarayanan.kuppuswamy@linux.intel.com |
|---|---|
| Date | 2017-05-31 07:30 +0200 |
| Subject | [PATCH v4 4/9] mfd: intel_soc_pmic_bxtwc: remove second level irq for gpio device |
| Message-ID | <tN4mK-vv-19@gated-at.bofh.it> |
| In reply to | #1653839 |
From: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
Currently all PMIC GPIO domain irqs are consumed by the same
device(bxt_wcove_gpio), so there is no need to export them as
separate interrupts. We can just export only the first level
GPIO irq(BXTWC_GPIO_LVL1_IRQ) as an irq resource and let the
GPIO device driver(bxt_wcove_gpio) handle the GPIO sub domain
irqs based on status value of GPIO level2 interrupt status
register. Also, just using only the first level irq will eliminate
the bug involved in requesting only the second level irq and not
explicitly enable the first level irq. For more info on this
issue please read the details at,
https://lkml.org/lkml/2017/2/27/148
Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org>
---
drivers/mfd/intel_soc_pmic_bxtwc.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
Changes since v1:
* None
Changes since v2:
* Rebased on top of latest release.
Changes since v3:
* None
diff --git a/drivers/mfd/intel_soc_pmic_bxtwc.c b/drivers/mfd/intel_soc_pmic_bxtwc.c
index 7c1ed27..af11c43 100644
--- a/drivers/mfd/intel_soc_pmic_bxtwc.c
+++ b/drivers/mfd/intel_soc_pmic_bxtwc.c
@@ -89,8 +89,6 @@ enum bxtwc_irqs_level2 {
BXTWC_USBC_IRQ,
BXTWC_CHGR0_IRQ,
BXTWC_CHGR1_IRQ,
- BXTWC_GPIO0_IRQ,
- BXTWC_GPIO1_IRQ,
BXTWC_CRIT_IRQ,
};
@@ -116,8 +114,6 @@ static const struct regmap_irq bxtwc_regmap_irqs_level2[] = {
REGMAP_IRQ_REG(BXTWC_USBC_IRQ, 2, BIT(5)),
REGMAP_IRQ_REG(BXTWC_CHGR0_IRQ, 2, 0x1f),
REGMAP_IRQ_REG(BXTWC_CHGR1_IRQ, 3, 0x1f),
- REGMAP_IRQ_REG(BXTWC_GPIO0_IRQ, 4, 0xff),
- REGMAP_IRQ_REG(BXTWC_GPIO1_IRQ, 5, 0x3f),
REGMAP_IRQ_REG(BXTWC_CRIT_IRQ, 6, 0x03),
};
@@ -153,8 +149,7 @@ static struct regmap_irq_chip bxtwc_regmap_irq_chip_tmu = {
};
static struct resource gpio_resources[] = {
- DEFINE_RES_IRQ_NAMED(BXTWC_GPIO0_IRQ, "GPIO0"),
- DEFINE_RES_IRQ_NAMED(BXTWC_GPIO1_IRQ, "GPIO1"),
+ DEFINE_RES_IRQ_NAMED(BXTWC_GPIO_LVL1_IRQ, "GPIO"),
};
static struct resource adc_resources[] = {
--
2.7.4
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web