mfd: tps65910: use regmap irq framework for interrupt
Subsystems (2)
v3 cover mfd: tps65910: use regmap irq framework for interrupt
This patch series has following change:
- Use regmap irq framework for interrupt registration. Corrected the register bit definition for interrupts.
- Move the irq table to tps65910.c and get rid of tps65910-irq.c.
- Raarrange the init sequence of different sub moduled of tps65910 like irq, clock and then mfd devices.
- Export the irq domain handle from regmap to use in mfd driver.
- Pass the irq domain in mfd_add_devices to have proper interrupt mapping for sub devices like RTC.
Changes from V1:
- rearrange patch on which older patch3 become the new patch 1.
- Add stub for new api in the regmap.
- Add empty line if paragraph change in description.
Changes from V2:
- Remove the older 4th patch where API for getting irq_domain was added in regmap. It is already taken care by Mark B.
Laxman Dewangan (4):
mfd: tps65910: Initialize mfd devices after all initialization done
mfd: tps65910: use regmap irq framework for interrupt support
mfd: tps65910: move interrupt implementation code to mfd file
mfd: tps65910: pass irq_domain when adding mfd sub devices
drivers/mfd/Makefile | 2 +- drivers/mfd/tps65910-irq.c | 260 ------------------------------------------ drivers/mfd/tps65910.c | 233 ++++++++++++++++++++++++++++++++++++-- include/linux/mfd/tps65910.h | 143 ++++++++++++++++------- 4 files changed, 325 insertions(+), 313 deletions(-) delete mode 100644 drivers/mfd/tps65910-irq.c
PATCH RESEND v3 1/4 mfd: tps65910: Initialize mfd devices after all initialization done
Add sub devices of tps65910 after all initialization like interrupt, clock etc. is done. This will make sure that require data gets initialized properly before sub devices probe's get called.
---
Changes from V:
- Rearrange patches so that this patch become first in place of third of series.
- Added Reviewed by: Mark as it is already revieved in patch V1.
Changes from V2:
- None.
drivers/mfd/tps65910.c | 16 ++++++++-------- 1 files changed, 8 insertions(+), 8 deletions(-)
drivers/mfd/tps65910.c +8 -8
@@ -279,14 +279,6 @@ static __devinit int tps65910_i2c_probe(struct i2c_client *i2c,return ret; } - ret =mfd_add_devices (tps65910->dev,-1 , - tps65910s,ARRAY_SIZE (tps65910s), -NULL ,0 ,NULL ); -if (ret <0 ) { -dev_err (&i2c->dev,"mfd_add_devices failed: %d\n" , ret); -return ret; - } - init_data->irq = pmic_plat_data->irq; init_data->irq_base = pmic_plat_data->irq_base;
@@ -299,6 +291,14 @@ static __devinit int tps65910_i2c_probe(struct i2c_client *i2c, pm_power_off = tps65910_power_off; } + ret =mfd_add_devices (tps65910->dev,-1 , + tps65910s,ARRAY_SIZE (tps65910s), +NULL ,0 ,NULL ); +if (ret <0 ) { +dev_err (&i2c->dev,"mfd_add_devices failed: %d\n" , ret); +return ret; + } +return ret; }
Signature · 1 line
1.7.1.1
PATCH RESEND v3 2/4 mfd: tps65910: use regmap irq framework for interrupt support
In reply to Laxman DewanganImplement irq support of tps65910 with regmap irq framework in place of implementing locally.
This reduces the code size significantly and easy to maintain.
---
No change from V1, just rearrange this patch.
It was already reviwed by Mark and hence adding his reviewed by.
No change from V2.
drivers/mfd/tps65910-irq.c | 375 ++++++++++++++++++++---------------------- include/linux/mfd/tps65910.h | 139 +++++++++++----- 2 files changed, 278 insertions(+), 236 deletions(-)
drivers/mfd/tps65910-irq.c +179 -196
@@ -24,171 +24,184 @@#include <linux/gpio.h> #include <linux/mfd/tps65910.h> -/* -* This is a threaded IRQ handler so can access I2C/SPI. Since all -* interrupts are clear on read the IRQ line will be reasserted and -* the physical IRQ will be handled again if another interrupt is -* asserted while we run - in the normal course of events this is a -* rare occurrence so we save I2C/SPI reads. We're also assuming that -* it's rare to get lots of interrupts firing simultaneously so try to -* minimise I/O. -*/ -static irqreturn_t tps65910_irq (int irq,void *irq_data) -{ -struct tps65910 *tps65910 = irq_data; -unsigned int reg; -u32 irq_sts; -u32 irq_mask; -int i; - -tps65910_reg_read (tps65910,TPS65910_INT_STS , ®); - irq_sts = reg; -tps65910_reg_read (tps65910,TPS65910_INT_STS2 , ®); - irq_sts |= reg <<8 ; -switch (tps65910_chip_id (tps65910)) { -case TPS65911 : -tps65910_reg_read (tps65910,TPS65910_INT_STS3 , ®); - irq_sts |= reg <<16 ; - } - -tps65910_reg_read (tps65910,TPS65910_INT_MSK , ®); - irq_mask = reg; -tps65910_reg_read (tps65910,TPS65910_INT_MSK2 , ®); - irq_mask |= reg <<8 ; -switch (tps65910_chip_id (tps65910)) { -case TPS65911 : -tps65910_reg_read (tps65910,TPS65910_INT_MSK3 , ®); - irq_mask |= reg <<16 ; - } - - irq_sts &= ~irq_mask; - -if (!irq_sts) -return IRQ_NONE ; - -for (i =0 ; i < tps65910->irq_num; i++) { - -if (!(irq_sts & (1 << i))) -continue ; - -handle_nested_irq (irq_find_mapping (tps65910->domain, i)); - } - -/* Write the STS register back to clear IRQs we handled */ - reg = irq_sts &0xFF ; - irq_sts >>=8 ; -tps65910_reg_write (tps65910,TPS65910_INT_STS , reg); - reg = irq_sts &0xFF ; -tps65910_reg_write (tps65910,TPS65910_INT_STS2 , reg); -switch (tps65910_chip_id (tps65910)) { -case TPS65911 : - reg = irq_sts >>8 ; -tps65910_reg_write (tps65910,TPS65910_INT_STS3 , reg); - } - -return IRQ_HANDLED ; -} - -static void tps65910_irq_lock (struct irq_data *data) -{ -struct tps65910 *tps65910 =irq_data_get_irq_chip_data (data); - -mutex_lock (&tps65910->irq_lock); -} - -static void tps65910_irq_sync_unlock (struct irq_data *data) -{ -struct tps65910 *tps65910 =irq_data_get_irq_chip_data (data); -u32 reg_mask; -unsigned int reg; - -tps65910_reg_read (tps65910,TPS65910_INT_MSK , ®); - reg_mask = reg; -tps65910_reg_read (tps65910,TPS65910_INT_MSK2 , ®); - reg_mask |= reg <<8 ; -switch (tps65910_chip_id (tps65910)) { -case TPS65911 : -tps65910_reg_read (tps65910,TPS65910_INT_MSK3 , ®); - reg_mask |= reg <<16 ; - } -if (tps65910->irq_mask != reg_mask) { - reg = tps65910->irq_mask &0xFF ; -tps65910_reg_write (tps65910,TPS65910_INT_MSK , reg); - reg = tps65910->irq_mask >>8 &0xFF ; -tps65910_reg_write (tps65910,TPS65910_INT_MSK2 , reg); -switch (tps65910_chip_id (tps65910)) { -case TPS65911 : - reg = tps65910->irq_mask >>16 ; -tps65910_reg_write (tps65910,TPS65910_INT_MSK3 , reg); - } - } -mutex_unlock (&tps65910->irq_lock); -} - -static void tps65910_irq_enable (struct irq_data *data) -{ -struct tps65910 *tps65910 =irq_data_get_irq_chip_data (data); - - tps65910->irq_mask &= ~(1 << data->hwirq); -} - -static void tps65910_irq_disable (struct irq_data *data) -{ -struct tps65910 *tps65910 =irq_data_get_irq_chip_data (data); - - tps65910->irq_mask |= (1 << data->hwirq); -} +static const struct regmap_irq tps65911_irqs[] = { +/* INT_STS */ + [TPS65911_IRQ_PWRHOLD_F ] = { + .mask =INT_MSK_PWRHOLD_F_IT_MSK_MASK , + .reg_offset =0 , + }, + [TPS65911_IRQ_VBAT_VMHI ] = { + .mask =INT_MSK_VMBHI_IT_MSK_MASK , + .reg_offset =0 , + }, + [TPS65911_IRQ_PWRON ] = { + .mask =INT_MSK_PWRON_IT_MSK_MASK , + .reg_offset =0 , + }, + [TPS65911_IRQ_PWRON_LP ] = { + .mask =INT_MSK_PWRON_LP_IT_MSK_MASK , + .reg_offset =0 , + }, + [TPS65911_IRQ_PWRHOLD_R ] = { + .mask =INT_MSK_PWRHOLD_R_IT_MSK_MASK , + .reg_offset =0 , + }, + [TPS65911_IRQ_HOTDIE ] = { + .mask =INT_MSK_HOTDIE_IT_MSK_MASK , + .reg_offset =0 , + }, + [TPS65911_IRQ_RTC_ALARM ] = { + .mask =INT_MSK_RTC_ALARM_IT_MSK_MASK , + .reg_offset =0 , + }, + [TPS65911_IRQ_RTC_PERIOD ] = { + .mask =INT_MSK_RTC_PERIOD_IT_MSK_MASK , + .reg_offset =0 , + }, + +/* INT_STS2 */ + [TPS65911_IRQ_GPIO0_R ] = { + .mask =INT_MSK2_GPIO0_R_IT_MSK_MASK , + .reg_offset =1 , + }, + [TPS65911_IRQ_GPIO0_F ] = { + .mask =INT_MSK2_GPIO0_F_IT_MSK_MASK , + .reg_offset =1 , + }, + [TPS65911_IRQ_GPIO1_R ] = { + .mask =INT_MSK2_GPIO1_R_IT_MSK_MASK , + .reg_offset =1 , + }, + [TPS65911_IRQ_GPIO1_F ] = { + .mask =INT_MSK2_GPIO1_F_IT_MSK_MASK , + .reg_offset =1 , + }, + [TPS65911_IRQ_GPIO2_R ] = { + .mask =INT_MSK2_GPIO2_R_IT_MSK_MASK , + .reg_offset =1 , + }, + [TPS65911_IRQ_GPIO2_F ] = { + .mask =INT_MSK2_GPIO2_F_IT_MSK_MASK , + .reg_offset =1 , + }, + [TPS65911_IRQ_GPIO3_R ] = { + .mask =INT_MSK2_GPIO3_R_IT_MSK_MASK , + .reg_offset =1 , + }, + [TPS65911_IRQ_GPIO3_F ] = { + .mask =INT_MSK2_GPIO3_F_IT_MSK_MASK , + .reg_offset =1 , + }, + +/* INT_STS3 */ + [TPS65911_IRQ_GPIO4_R ] = { + .mask =INT_MSK3_GPIO4_R_IT_MSK_MASK , + .reg_offset =2 , + }, + [TPS65911_IRQ_GPIO4_F ] = { + .mask =INT_MSK3_GPIO4_F_IT_MSK_MASK , + .reg_offset =2 , + }, + [TPS65911_IRQ_GPIO5_R ] = { + .mask =INT_MSK3_GPIO5_R_IT_MSK_MASK , + .reg_offset =2 , + }, + [TPS65911_IRQ_GPIO5_F ] = { + .mask =INT_MSK3_GPIO5_F_IT_MSK_MASK , + .reg_offset =2 , + }, + [TPS65911_IRQ_WTCHDG ] = { + .mask =INT_MSK3_WTCHDG_IT_MSK_MASK , + .reg_offset =2 , + }, + [TPS65911_IRQ_VMBCH2_H ] = { + .mask =INT_MSK3_VMBCH2_H_IT_MSK_MASK , + .reg_offset =2 , + }, + [TPS65911_IRQ_VMBCH2_L ] = { + .mask =INT_MSK3_VMBCH2_L_IT_MSK_MASK , + .reg_offset =2 , + }, + [TPS65911_IRQ_PWRDN ] = { + .mask =INT_MSK3_PWRDN_IT_MSK_MASK , + .reg_offset =2 , + }, +}; -#ifdef CONFIG_PM_SLEEP -static int tps65910_irq_set_wake (struct irq_data *data,unsigned int enable) -{ -struct tps65910 *tps65910 =irq_data_get_irq_chip_data (data); -return irq_set_irq_wake (tps65910->chip_irq, enable); -} -#else -#define tps65910_irq_set_wake NULL -#endif +static const struct regmap_irq tps65910_irqs[] = { +/* INT_STS */ + [TPS65910_IRQ_VBAT_VMBDCH ] = { + .mask =TPS65910_INT_MSK_VMBDCH_IT_MSK_MASK , + .reg_offset =0 , + }, + [TPS65910_IRQ_VBAT_VMHI ] = { + .mask =TPS65910_INT_MSK_VMBHI_IT_MSK_MASK , + .reg_offset =0 , + }, + [TPS65910_IRQ_PWRON ] = { + .mask =TPS65910_INT_MSK_PWRON_IT_MSK_MASK , + .reg_offset =0 , + }, + [TPS65910_IRQ_PWRON_LP ] = { + .mask =TPS65910_INT_MSK_PWRON_LP_IT_MSK_MASK , + .reg_offset =0 , + }, + [TPS65910_IRQ_PWRHOLD ] = { + .mask =TPS65910_INT_MSK_PWRHOLD_IT_MSK_MASK , + .reg_offset =0 , + }, + [TPS65910_IRQ_HOTDIE ] = { + .mask =TPS65910_INT_MSK_HOTDIE_IT_MSK_MASK , + .reg_offset =0 , + }, + [TPS65910_IRQ_RTC_ALARM ] = { + .mask =TPS65910_INT_MSK_RTC_ALARM_IT_MSK_MASK , + .reg_offset =0 , + }, + [TPS65910_IRQ_RTC_PERIOD ] = { + .mask =TPS65910_INT_MSK_RTC_PERIOD_IT_MSK_MASK , + .reg_offset =0 , + }, + +/* INT_STS2 */ + [TPS65910_IRQ_GPIO_R ] = { + .mask =TPS65910_INT_MSK2_GPIO0_F_IT_MSK_MASK , + .reg_offset =1 , + }, + [TPS65910_IRQ_GPIO_F ] = { + .mask =TPS65910_INT_MSK2_GPIO0_R_IT_MSK_MASK , + .reg_offset =1 , + }, +}; -static struct irq_chip tps65910_irq_chip = { +static struct regmap_irq_chip tps65911_irq_chip = { .name ="tps65910" , - .irq_bus_lock = tps65910_irq_lock, - .irq_bus_sync_unlock = tps65910_irq_sync_unlock, - .irq_disable = tps65910_irq_disable, - .irq_enable = tps65910_irq_enable, - .irq_set_wake = tps65910_irq_set_wake, + .irqs = tps65911_irqs, + .num_irqs =ARRAY_SIZE (tps65911_irqs), + .num_regs =3 , + .irq_reg_stride =2 , + .status_base =TPS65910_INT_STS , + .mask_base =TPS65910_INT_MSK , + .ack_base =TPS65910_INT_MSK , }; -static int tps65910_irq_map (struct irq_domain *h,unsigned int virq, -irq_hw_number_t hw) -{ -struct tps65910 *tps65910 = h->host_data; - -irq_set_chip_data (virq, tps65910); -irq_set_chip_and_handler (virq, &tps65910_irq_chip, handle_edge_irq); -irq_set_nested_thread (virq,1 ); - -/* ARM needs us to explicitly flag the IRQ as valid -* and will set them noprobe when we do so. */ -#ifdef CONFIG_ARM -set_irq_flags (virq,IRQF_VALID ); -#else -irq_set_noprobe (virq); -#endif - -return 0 ; -} - -static struct irq_domain_ops tps65910_domain_ops = { - .map = tps65910_irq_map, - .xlate = irq_domain_xlate_twocell, +static struct regmap_irq_chip tps65910_irq_chip = { + .name ="tps65910" , + .irqs = tps65910_irqs, + .num_irqs =ARRAY_SIZE (tps65910_irqs), + .num_regs =2 , + .irq_reg_stride =2 , + .status_base =TPS65910_INT_STS , + .mask_base =TPS65910_INT_MSK , + .ack_base =TPS65910_INT_MSK , };int tps65910_irq_init (struct tps65910 *tps65910,int irq,struct tps65910_platform_data *pdata) { -int ret; -int flags =IRQF_ONESHOT ; +int ret =0 ; +static struct regmap_irq_chip *tps6591x_irqs_chip;if (!irq) {dev_warn (tps65910->dev,"No interrupt support, no core IRQ\n" );
@@ -200,61 +213,31 @@ int tps65910_irq_init(struct tps65910 *tps65910, int irq,return -EINVAL ; } +switch (tps65910_chip_id (tps65910)) {case TPS65910 : - tps65910->irq_num =TPS65910_NUM_IRQ ; + tps6591x_irqs_chip = &tps65910_irq_chip;break ;case TPS65911 : - tps65910->irq_num =TPS65911_NUM_IRQ ; + tps6591x_irqs_chip = &tps65911_irq_chip;break ; } -if (pdata->irq_base >0 ) { - pdata->irq_base =irq_alloc_descs (pdata->irq_base,0 , - tps65910->irq_num,-1 ); -if (pdata->irq_base <0 ) { -dev_warn (tps65910->dev,"Failed to alloc IRQs: %d\n" , - pdata->irq_base); -return pdata->irq_base; - } - } - - tps65910->irq_mask =0xFFFFFF ; - -mutex_init (&tps65910->irq_lock); tps65910->chip_irq = irq; - tps65910->irq_base = pdata->irq_base; - -if (pdata->irq_base >0 ) - tps65910->domain =irq_domain_add_legacy (tps65910->dev->of_node, - tps65910->irq_num, - pdata->irq_base, -0 , - &tps65910_domain_ops, tps65910); -else - tps65910->domain =irq_domain_add_linear (tps65910->dev->of_node, - tps65910->irq_num, - &tps65910_domain_ops, tps65910); - -if (!tps65910->domain) { -dev_err (tps65910->dev,"Failed to create IRQ domain\n" ); -return -ENOMEM ; + ret =regmap_add_irq_chip (tps65910->regmap, tps65910->chip_irq, +IRQF_ONESHOT , pdata->irq_base, + tps6591x_irqs_chip, &tps65910->irq_data); +if (ret <0 ) { +dev_warn (tps65910->dev, +"Failed to add irq_chip %d\n" , ret); +return ret; } - - ret =request_threaded_irq (irq,NULL , tps65910_irq, flags, -"tps65910" , tps65910); - -irq_set_irq_type (irq,IRQ_TYPE_LEVEL_LOW ); - -if (ret !=0 ) -dev_err (tps65910->dev,"Failed to request IRQ: %d\n" , ret); -return ret; }int tps65910_irq_exit (struct tps65910 *tps65910) { -if (tps65910->chip_irq) -free_irq (tps65910->chip_irq, tps65910); +if (tps65910->chip_irq >0 ) +regmap_del_irq_chip (tps65910->chip_irq, tps65910->irq_data);return 0 ; }
include/linux/mfd/tps65910.h +99 -40
198 lines not on this page · raw message
Signature · 1 line
1.7.1.1
PATCH RESEND v3 3/4 mfd: tps65910: move interrupt implementation code to mfd file
In reply to Laxman DewanganIn place of implementing the irq support in separate file, moving implementation to main mfd file.
The irq files only contains the table and init steps only and does not need extra file to have this only for this purpose.
---
No change from V1, just rearrange this patch.
It was already reviwed by Mark and hence adding his reviewed by.
No change from V2.
drivers/mfd/Makefile | 2 +- drivers/mfd/tps65910-irq.c | 243 ------------------------------------------ drivers/mfd/tps65910.c | 216 +++++++++++++++++++++++++++++++++++++ include/linux/mfd/tps65910.h | 4 - 4 files changed, 217 insertions(+), 248 deletions(-) delete mode 100644 drivers/mfd/tps65910-irq.c
drivers/mfd/Makefile +1 -1
@@ -52,7 +52,7 @@ obj-$(CONFIG_TPS6105X) += tps6105x.o obj-$(CONFIG_TPS65010) += tps65010.o obj-$(CONFIG_TPS6507X) += tps6507x.o obj-$(CONFIG_MFD_TPS65217) += tps65217.o -obj-$(CONFIG_MFD_TPS65910) += tps65910.o tps65910-irq.o +obj-$(CONFIG_MFD_TPS65910) += tps65910.o tps65912-objs := tps65912-core.o tps65912-irq.o obj-$(CONFIG_MFD_TPS65912) += tps65912.o obj-$(CONFIG_MFD_TPS65912_I2C) += tps65912-i2c.o
drivers/mfd/tps65910-irq.c deleted +0 -243
243 lines not on this page · raw message
drivers/mfd/tps65910.c +216 -0
228 lines not on this page · raw message
include/linux/mfd/tps65910.h +0 -4
@@ -915,10 +915,6 @@ struct tps65910_platform_data {int irq_base; }; -int tps65910_irq_init (struct tps65910 *tps65910,int irq, -struct tps65910_platform_data *pdata); -int tps65910_irq_exit (struct tps65910 *tps65910); -static inline int tps65910_chip_id (struct tps65910 *tps65910) {return tps65910->id;
Signature · 1 line
1.7.1.1
PATCH RESEND v3 4/4 mfd: tps65910: pass irq_domain when adding mfd sub devices
In reply to Laxman DewanganWhen adding the sub device "tps65910-rtc", is it passed the IO resource IRQ for the interrupt number. This interrupt needs to map in the device irq domain. Pass the irq domain of device in mfd_add_devices() so that proper irq mapping can be done when adding the sub device RTC.
---
- Remove older patch 4 and make this as 4th patch.
- Added reviwed by Mark as he already reviewed it.
drivers/mfd/tps65910.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
drivers/mfd/tps65910.c +2 -1
@@ -509,7 +509,8 @@ static __devinit int tps65910_i2c_probe(struct i2c_client *i2c, ret =mfd_add_devices (tps65910->dev,-1 , tps65910s,ARRAY_SIZE (tps65910s), -NULL ,0 ,NULL ); +NULL ,0 , +regmap_irq_get_domain (tps65910->irq_data));if (ret <0 ) {dev_err (&i2c->dev,"mfd_add_devices failed: %d\n" , ret);return ret;
Signature · 1 line
1.7.1.1
Hi Laxman,
Quoted 11 lines · Laxman Dewangan
This patch series has following change:
- Use regmap irq framework for interrupt registration. Corrected the register bit definition for interrupts.
- Move the irq table totps65910.cand get rid oftps65910-irq.c.
- Raarrange the init sequence of different sub moduled of tps65910 like irq, clock and then mfd devices.
- Export the irq domain handle from regmap to use in mfd driver.
- Pass the irq domain inmfd_add_devicesto have proper interrupt mapping for sub devices like RTC.
Quoted 8 lines
Changes from V1:
- rearrange patch on which older patch3 become the new patch 1.
- Add stub for new api in the regmap.
- Add empty line if paragraph change in description.Changes from V2:
- Remove the older 4th patch where API for gettingirq_domainwas added in regmap. It is already taken care by Mark B.
The patchset looks fine, but it should either go through Mark's tree or I should merge Mark's regmap_irq_get_domain patch to my for-next branch. Mark, any preference ?
Cheers,
Samuel.
Signature · 2 lines
Intel Open Source Technology Centre http://oss.intel.com/
Quoted 3 lines · Samuel Ortiz
The patchset looks fine, but it should either go through Mark's tree or I should merge Mark's
regmap_irq_get_domainpatch to my for-next branch. Mark, any preference ?
I don't mind that much, there's a tag in my regmap tree you can pull in to integrate or I can apply things just as easily.
Hi Mark,
Quoted 8 lines · Mark Brown
Quoted 3 lines · Samuel Ortiz
The patchset looks fine, but it should either go through Mark's tree or I should merge Mark's
regmap_irq_get_domainpatch to my for-next branch. Mark, any preference ?I don't mind that much, there's a tag in my regmap tree you can pull in to integrate or I can apply things just as easily.
I merged your topic/domain branch into my for-next one and I applied Laxman patches on top of it, thanks.
Cheers,
Samuel.
Signature · 2 lines
Intel Open Source Technology Centre http://oss.intel.com/
Quoted 5 lines · Samuel Ortiz
Hi Mark,
Quoted 2 lines · Mark Brown
On Tue, Nov 13, 2012 at 08:56:37PM +0100, Samuel Ortiz wrote:
Quoted 7 lines
Quoted 5 lines
Quoted 3 lines
The patchset looks fine, but it should either go through Mark's tree or I should merge Mark's
regmap_irq_get_domainpatch to my for-next branch. Mark, any preference ?I don't mind that much, there's a tag in my regmap tree you can pull in to integrate or I can apply things just as easily.
I merged your topic/domain branch into my for-next one and I applied Laxman patches on top of it, thanks.
Thanks Samuel for taking care.
Just want to share info that other patch [PATCH V4 1/2] mfd: add TI TPS80031 mfd core driver also need ot go on same tree as this driver use the new api from regmap.
Thanks,
Laxman