* [RESEND PATCH 1/2] mfd: add irq domain support for max8997 interrupts
@ 2012-07-02 0:02 Chanwoo Choi
2012-07-17 16:34 ` Greg KH
0 siblings, 1 reply; 4+ messages in thread
From: Chanwoo Choi @ 2012-07-02 0:02 UTC (permalink / raw)
To: gregkh
Cc: thomas.abraham, broonie, grant.likely, sameo, myungjoo.ham,
kyungmin.park, linux-kernel, Chanwoo Choi
From: Thomas Abraham <thomas.abraham@linaro.org>
Add irq domain support for max8997 interrupts. The reverse mapping method
used is linear mapping since the sub-drivers of max8997 such as regulator
and charger drivers can use the max8997 irq_domain to get the linux irq
number for max8997 interrupts. All uses of irq_base in platform data and
max8997 driver private data are removed.
Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org>
Acked-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Acked-by: Grant Likely <grant.likely@secretlab.ca>
Acked-by: Samuel Ortiz <sameo@linux.intel.com>
[Fix two bug which set max8997->irq_domain and correct wrong parameter]
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
arch/arm/mach-exynos/mach-nuri.c | 4 --
arch/arm/mach-exynos/mach-origen.c | 1 -
drivers/mfd/Kconfig | 1 +
drivers/mfd/max8997-irq.c | 62 +++++++++++++++++++++--------------
drivers/mfd/max8997.c | 1 -
include/linux/mfd/max8997-private.h | 4 ++-
include/linux/mfd/max8997.h | 1 -
7 files changed, 41 insertions(+), 33 deletions(-)
diff --git a/arch/arm/mach-exynos/mach-nuri.c b/arch/arm/mach-exynos/mach-nuri.c
index 656f8fc..acb58f5 100644
--- a/arch/arm/mach-exynos/mach-nuri.c
+++ b/arch/arm/mach-exynos/mach-nuri.c
@@ -1067,12 +1067,8 @@ static struct platform_device nuri_max8903_device = {
static void __init nuri_power_init(void)
{
int gpio;
- int irq_base = IRQ_GPIO_END + 1;
int ta_en = 0;
- nuri_max8997_pdata.irq_base = irq_base;
- irq_base += MAX8997_IRQ_NR;
-
gpio = EXYNOS4_GPX0(7);
gpio_request(gpio, "AP_PMIC_IRQ");
s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0xf));
diff --git a/arch/arm/mach-exynos/mach-origen.c b/arch/arm/mach-exynos/mach-origen.c
index f5572be..3ce403d 100644
--- a/arch/arm/mach-exynos/mach-origen.c
+++ b/arch/arm/mach-exynos/mach-origen.c
@@ -425,7 +425,6 @@ static struct max8997_platform_data __initdata origen_max8997_pdata = {
.buck1_gpiodvs = false,
.buck2_gpiodvs = false,
.buck5_gpiodvs = false,
- .irq_base = IRQ_GPIO_END + 1,
.ignore_gpiodvs_side_effect = true,
.buck125_default_idx = 0x0,
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index e129c82..295941b 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -449,6 +449,7 @@ config MFD_MAX8997
bool "Maxim Semiconductor MAX8997/8966 PMIC Support"
depends on I2C=y && GENERIC_HARDIRQS
select MFD_CORE
+ select IRQ_DOMAIN
help
Say yes here to support for Maxim Semiconductor MAX8997/8966.
This is a Power Management IC with RTC, Flash, Fuel Gauge, Haptic,
diff --git a/drivers/mfd/max8997-irq.c b/drivers/mfd/max8997-irq.c
index 09274cf..43fa614 100644
--- a/drivers/mfd/max8997-irq.c
+++ b/drivers/mfd/max8997-irq.c
@@ -142,7 +142,8 @@ static void max8997_irq_sync_unlock(struct irq_data *data)
static const inline struct max8997_irq_data *
irq_to_max8997_irq(struct max8997_dev *max8997, int irq)
{
- return &max8997_irqs[irq - max8997->irq_base];
+ struct irq_data *data = irq_get_irq_data(irq);
+ return &max8997_irqs[data->hwirq];
}
static void max8997_irq_mask(struct irq_data *data)
@@ -182,7 +183,7 @@ static irqreturn_t max8997_irq_thread(int irq, void *data)
u8 irq_reg[MAX8997_IRQ_GROUP_NR] = {};
u8 irq_src;
int ret;
- int i;
+ int i, cur_irq;
ret = max8997_read_reg(max8997->i2c, MAX8997_REG_INTSRC, &irq_src);
if (ret < 0) {
@@ -269,8 +270,11 @@ static irqreturn_t max8997_irq_thread(int irq, void *data)
/* Report */
for (i = 0; i < MAX8997_IRQ_NR; i++) {
- if (irq_reg[max8997_irqs[i].group] & max8997_irqs[i].mask)
- handle_nested_irq(max8997->irq_base + i);
+ if (irq_reg[max8997_irqs[i].group] & max8997_irqs[i].mask) {
+ cur_irq = irq_find_mapping(max8997->irq_domain, i);
+ if (cur_irq)
+ handle_nested_irq(cur_irq);
+ }
}
return IRQ_HANDLED;
@@ -278,26 +282,40 @@ static irqreturn_t max8997_irq_thread(int irq, void *data)
int max8997_irq_resume(struct max8997_dev *max8997)
{
- if (max8997->irq && max8997->irq_base)
- max8997_irq_thread(max8997->irq_base, max8997);
+ if (max8997->irq && max8997->irq_domain)
+ max8997_irq_thread(0, max8997);
+ return 0;
+}
+
+static int max8997_irq_domain_map(struct irq_domain *d, unsigned int irq,
+ irq_hw_number_t hw)
+{
+ struct max8997_dev *max8997 = d->host_data;
+
+ irq_set_chip_data(irq, max8997);
+ irq_set_chip_and_handler(irq, &max8997_irq_chip, handle_edge_irq);
+ irq_set_nested_thread(irq, 1);
+#ifdef CONFIG_ARM
+ set_irq_flags(irq, IRQF_VALID);
+#else
+ irq_set_noprobe(irq);
+#endif
return 0;
}
+static struct irq_domain_ops max8997_irq_domain_ops = {
+ .map = max8997_irq_domain_map,
+};
+
int max8997_irq_init(struct max8997_dev *max8997)
{
+ struct irq_domain *domain;
int i;
- int cur_irq;
int ret;
u8 val;
if (!max8997->irq) {
dev_warn(max8997->dev, "No interrupt specified.\n");
- max8997->irq_base = 0;
- return 0;
- }
-
- if (!max8997->irq_base) {
- dev_err(max8997->dev, "No interrupt base specified.\n");
return 0;
}
@@ -327,19 +345,13 @@ int max8997_irq_init(struct max8997_dev *max8997)
true : false;
}
- /* Register with genirq */
- for (i = 0; i < MAX8997_IRQ_NR; i++) {
- cur_irq = i + max8997->irq_base;
- irq_set_chip_data(cur_irq, max8997);
- irq_set_chip_and_handler(cur_irq, &max8997_irq_chip,
- handle_edge_irq);
- irq_set_nested_thread(cur_irq, 1);
-#ifdef CONFIG_ARM
- set_irq_flags(cur_irq, IRQF_VALID);
-#else
- irq_set_noprobe(cur_irq);
-#endif
+ domain = irq_domain_add_linear(NULL, MAX8997_IRQ_NR,
+ &max8997_irq_domain_ops, max8997);
+ if (!domain) {
+ dev_err(max8997->dev, "could not create irq domain\n");
+ return -ENODEV;
}
+ max8997->irq_domain = domain;
ret = request_threaded_irq(max8997->irq, NULL, max8997_irq_thread,
IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
diff --git a/drivers/mfd/max8997.c b/drivers/mfd/max8997.c
index cb83a7a..20ecad3 100644
--- a/drivers/mfd/max8997.c
+++ b/drivers/mfd/max8997.c
@@ -143,7 +143,6 @@ static int max8997_i2c_probe(struct i2c_client *i2c,
if (!pdata)
goto err;
- max8997->irq_base = pdata->irq_base;
max8997->ono = pdata->ono;
mutex_init(&max8997->iolock);
diff --git a/include/linux/mfd/max8997-private.h b/include/linux/mfd/max8997-private.h
index 3f4deb6..830152c 100644
--- a/include/linux/mfd/max8997-private.h
+++ b/include/linux/mfd/max8997-private.h
@@ -23,6 +23,8 @@
#define __LINUX_MFD_MAX8997_PRIV_H
#include <linux/i2c.h>
+#include <linux/export.h>
+#include <linux/irqdomain.h>
#define MAX8997_REG_INVALID (0xff)
@@ -325,7 +327,7 @@ struct max8997_dev {
int irq;
int ono;
- int irq_base;
+ struct irq_domain *irq_domain;
struct mutex irqlock;
int irq_masks_cur[MAX8997_IRQ_GROUP_NR];
int irq_masks_cache[MAX8997_IRQ_GROUP_NR];
diff --git a/include/linux/mfd/max8997.h b/include/linux/mfd/max8997.h
index b40c08c..328d8e2 100644
--- a/include/linux/mfd/max8997.h
+++ b/include/linux/mfd/max8997.h
@@ -181,7 +181,6 @@ struct max8997_led_platform_data {
struct max8997_platform_data {
/* IRQ */
- int irq_base;
int ono;
int wakeup;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [RESEND PATCH 1/2] mfd: add irq domain support for max8997 interrupts
2012-07-02 0:02 [RESEND PATCH 1/2] mfd: add irq domain support for max8997 interrupts Chanwoo Choi
@ 2012-07-17 16:34 ` Greg KH
2012-07-18 1:48 ` Chanwoo Choi
0 siblings, 1 reply; 4+ messages in thread
From: Greg KH @ 2012-07-17 16:34 UTC (permalink / raw)
To: Chanwoo Choi
Cc: thomas.abraham, broonie, grant.likely, sameo, myungjoo.ham,
kyungmin.park, linux-kernel
On Mon, Jul 02, 2012 at 09:02:55AM +0900, Chanwoo Choi wrote:
> From: Thomas Abraham <thomas.abraham@linaro.org>
>
> Add irq domain support for max8997 interrupts. The reverse mapping method
> used is linear mapping since the sub-drivers of max8997 such as regulator
> and charger drivers can use the max8997 irq_domain to get the linux irq
> number for max8997 interrupts. All uses of irq_base in platform data and
> max8997 driver private data are removed.
>
> Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org>
> Acked-by: MyungJoo Ham <myungjoo.ham@samsung.com>
> Acked-by: Grant Likely <grant.likely@secretlab.ca>
> Acked-by: Samuel Ortiz <sameo@linux.intel.com>
> [Fix two bug which set max8997->irq_domain and correct wrong parameter]
> Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> ---
> arch/arm/mach-exynos/mach-nuri.c | 4 --
> arch/arm/mach-exynos/mach-origen.c | 1 -
> drivers/mfd/Kconfig | 1 +
> drivers/mfd/max8997-irq.c | 62 +++++++++++++++++++++--------------
> drivers/mfd/max8997.c | 1 -
> include/linux/mfd/max8997-private.h | 4 ++-
> include/linux/mfd/max8997.h | 1 -
> 7 files changed, 41 insertions(+), 33 deletions(-)
Once again, this patch breaks the build.
Please be more careful with your patches, and TEST THEM BEFORE SENDING
THEM OUT.
ugh,
greg k-h
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RESEND PATCH 1/2] mfd: add irq domain support for max8997 interrupts
2012-07-17 16:34 ` Greg KH
@ 2012-07-18 1:48 ` Chanwoo Choi
2012-07-18 4:46 ` Greg KH
0 siblings, 1 reply; 4+ messages in thread
From: Chanwoo Choi @ 2012-07-18 1:48 UTC (permalink / raw)
To: Greg KH
Cc: thomas.abraham, broonie, grant.likely, sameo, myungjoo.ham,
kyungmin.park, linux-kernel
On 07/18/2012 01:34 AM, Greg KH wrote:
> On Mon, Jul 02, 2012 at 09:02:55AM +0900, Chanwoo Choi wrote:
>> From: Thomas Abraham <thomas.abraham@linaro.org>
>>
>> Add irq domain support for max8997 interrupts. The reverse mapping method
>> used is linear mapping since the sub-drivers of max8997 such as regulator
>> and charger drivers can use the max8997 irq_domain to get the linux irq
>> number for max8997 interrupts. All uses of irq_base in platform data and
>> max8997 driver private data are removed.
>>
>> Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org>
>> Acked-by: MyungJoo Ham <myungjoo.ham@samsung.com>
>> Acked-by: Grant Likely <grant.likely@secretlab.ca>
>> Acked-by: Samuel Ortiz <sameo@linux.intel.com>
>> [Fix two bug which set max8997->irq_domain and correct wrong parameter]
>> Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
>> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
>> ---
>> arch/arm/mach-exynos/mach-nuri.c | 4 --
>> arch/arm/mach-exynos/mach-origen.c | 1 -
>> drivers/mfd/Kconfig | 1 +
>> drivers/mfd/max8997-irq.c | 62 +++++++++++++++++++++--------------
>> drivers/mfd/max8997.c | 1 -
>> include/linux/mfd/max8997-private.h | 4 ++-
>> include/linux/mfd/max8997.h | 1 -
>> 7 files changed, 41 insertions(+), 33 deletions(-)
>
> Once again, this patch breaks the build.
>
> Please be more careful with your patches, and TEST THEM BEFORE SENDING
> THEM OUT.
>
I have posted patchset including below two patch. If only first patch is
applied to build test, this patch breaks the build. The second patch fix
that extcon-max8997 driver use irq_domain instead of irq_base field in
'struct max8997_dev'.
[PATCH v3 1/2] mfd: add irq domain support for max8997 interrupts
[PATCH v3 2/2] Extcon: MAX8997: Add support irq domain for MAX8997 muic
Please apply second patch when test this patchset.
Sorry, I didn't consolidate second patch in the first patch to resolve
build break because of converting MUIC driver of MAX8997
from 'max8997-muic.c' to 'extcon-max8997.c'.
- http://lkml.org/lkml/2012/5/20/142
Best Regards,
Chanwoo Choi
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RESEND PATCH 1/2] mfd: add irq domain support for max8997 interrupts
2012-07-18 1:48 ` Chanwoo Choi
@ 2012-07-18 4:46 ` Greg KH
0 siblings, 0 replies; 4+ messages in thread
From: Greg KH @ 2012-07-18 4:46 UTC (permalink / raw)
To: Chanwoo Choi
Cc: thomas.abraham, broonie, grant.likely, sameo, myungjoo.ham,
kyungmin.park, linux-kernel
On Wed, Jul 18, 2012 at 10:48:04AM +0900, Chanwoo Choi wrote:
> On 07/18/2012 01:34 AM, Greg KH wrote:
>
> > On Mon, Jul 02, 2012 at 09:02:55AM +0900, Chanwoo Choi wrote:
> >> From: Thomas Abraham <thomas.abraham@linaro.org>
> >>
> >> Add irq domain support for max8997 interrupts. The reverse mapping method
> >> used is linear mapping since the sub-drivers of max8997 such as regulator
> >> and charger drivers can use the max8997 irq_domain to get the linux irq
> >> number for max8997 interrupts. All uses of irq_base in platform data and
> >> max8997 driver private data are removed.
> >>
> >> Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org>
> >> Acked-by: MyungJoo Ham <myungjoo.ham@samsung.com>
> >> Acked-by: Grant Likely <grant.likely@secretlab.ca>
> >> Acked-by: Samuel Ortiz <sameo@linux.intel.com>
> >> [Fix two bug which set max8997->irq_domain and correct wrong parameter]
> >> Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
> >> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> >> ---
> >> arch/arm/mach-exynos/mach-nuri.c | 4 --
> >> arch/arm/mach-exynos/mach-origen.c | 1 -
> >> drivers/mfd/Kconfig | 1 +
> >> drivers/mfd/max8997-irq.c | 62 +++++++++++++++++++++--------------
> >> drivers/mfd/max8997.c | 1 -
> >> include/linux/mfd/max8997-private.h | 4 ++-
> >> include/linux/mfd/max8997.h | 1 -
> >> 7 files changed, 41 insertions(+), 33 deletions(-)
> >
> > Once again, this patch breaks the build.
> >
> > Please be more careful with your patches, and TEST THEM BEFORE SENDING
> > THEM OUT.
> >
>
>
> I have posted patchset including below two patch. If only first patch is
> applied to build test, this patch breaks the build. The second patch fix
> that extcon-max8997 driver use irq_domain instead of irq_base field in
> 'struct max8997_dev'.
>
> [PATCH v3 1/2] mfd: add irq domain support for max8997 interrupts
> [PATCH v3 2/2] Extcon: MAX8997: Add support irq domain for MAX8997 muic
>
> Please apply second patch when test this patchset.
No. You can not break the build at any point in the patch series
process, sorry. Each patch must be stand-alone and correct.
greg k-h
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2012-07-18 4:47 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-02 0:02 [RESEND PATCH 1/2] mfd: add irq domain support for max8997 interrupts Chanwoo Choi
2012-07-17 16:34 ` Greg KH
2012-07-18 1:48 ` Chanwoo Choi
2012-07-18 4:46 ` Greg KH
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.