2020-02-21 14:48:40

by Adam Thomson

[permalink] [raw]
Subject: RE: [PATCH V5] mfd: da9062: add support for interrupt polarity defined in device tree

On 17 February 2020 00:44, Shreyas Joshi wrote:

> The da9062 interrupt handler cannot necessarily be low active.
> Add a function to configure the interrupt type based on what is defined in the
> device tree.
> The allowable interrupt type is either low or high level trigger.
>
> Signed-off-by: Shreyas Joshi <[email protected]>
> ---

This is V5 of the patch and there's still no revision history information here.
Please add this in the future when submitting patches as it helps reviewers
understand (or reminds them) what has come before.

> drivers/mfd/da9062-core.c | 43 ++++++++++++++++++++++++++++++++++++--
> -
> 1 file changed, 40 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/mfd/da9062-core.c b/drivers/mfd/da9062-core.c
> index 419c73533401..cd3c4c80699e 100644
> --- a/drivers/mfd/da9062-core.c
> +++ b/drivers/mfd/da9062-core.c
> @@ -21,6 +21,9 @@
> #define DA9062_REG_EVENT_B_OFFSET 1
> #define DA9062_REG_EVENT_C_OFFSET 2
>
> +#define DA9062_IRQ_LOW 0
> +#define DA9062_IRQ_HIGH 1
> +
> static struct regmap_irq da9061_irqs[] = {
> /* EVENT A */
> [DA9061_IRQ_ONKEY] = {
> @@ -369,6 +372,33 @@ static int da9062_get_device_type(struct da9062 *chip)
> return ret;
> }
>
> +static u32 da9062_configure_irq_type(struct da9062 *chip, int irq, u32 *trigger)
> +{
> + u32 irq_type = 0;
> + struct irq_data *irq_data = irq_get_irq_data(irq);
> +
> + if (!irq_data) {
> + dev_err(chip->dev, "Invalid IRQ: %d\n", irq);
> + return -EINVAL;
> + }
> + *trigger = irqd_get_trigger_type(irq_data);
> +
> + switch (*trigger) {
> + case IRQ_TYPE_LEVEL_HIGH:
> + irq_type = DA9062_IRQ_HIGH;
> + break;
> + case IRQ_TYPE_LEVEL_LOW:
> + irq_type = DA9062_IRQ_LOW;
> + break;
> + default:
> + dev_warn(chip->dev, "Unsupported IRQ type: %d\n", *trigger);
> + return -EINVAL;
> + }
> + return regmap_update_bits(chip->regmap, DA9062AA_CONFIG_A,
> + DA9062AA_IRQ_TYPE_MASK,
> + irq_type << DA9062AA_IRQ_TYPE_SHIFT);
> +}
> +
> static const struct regmap_range da9061_aa_readable_ranges[] = {
> regmap_reg_range(DA9062AA_PAGE_CON, DA9062AA_STATUS_B),
> regmap_reg_range(DA9062AA_STATUS_D, DA9062AA_EVENT_C),
> @@ -417,6 +447,7 @@ static const struct regmap_range
> da9061_aa_writeable_ranges[] = {
> regmap_reg_range(DA9062AA_VBUCK1_A, DA9062AA_VBUCK4_A),
> regmap_reg_range(DA9062AA_VBUCK3_A, DA9062AA_VBUCK3_A),
> regmap_reg_range(DA9062AA_VLDO1_A, DA9062AA_VLDO4_A),
> + regmap_reg_range(DA9062AA_CONFIG_A, DA9062AA_CONFIG_B),

Hmm. I don't believe we need access to CONFIG_B here do we? Just CONFIG_A to
configure polarity. Also we will need this register to be part of the
aa_readable_ranges table for regmap_update_bits() to work I believe.

Otherwise I think this looks ok so will give the nod once these changes have
been made.

> regmap_reg_range(DA9062AA_VBUCK1_B, DA9062AA_VBUCK4_B),
> regmap_reg_range(DA9062AA_VBUCK3_B, DA9062AA_VBUCK3_B),
> regmap_reg_range(DA9062AA_VLDO1_B, DA9062AA_VLDO4_B),
> @@ -596,6 +627,7 @@ static int da9062_i2c_probe(struct i2c_client *i2c,
> const struct regmap_irq_chip *irq_chip;
> const struct regmap_config *config;
> int cell_num;
> + u32 trigger_type = 0;
> int ret;
>
> chip = devm_kzalloc(&i2c->dev, sizeof(*chip), GFP_KERNEL);
> @@ -654,10 +686,15 @@ static int da9062_i2c_probe(struct i2c_client *i2c,
> if (ret)
> return ret;
>
> + ret = da9062_configure_irq_type(chip, i2c->irq, &trigger_type);
> + if (ret < 0) {
> + dev_err(chip->dev, "Failed to configure IRQ type\n");
> + return ret;
> + }
> +
> ret = regmap_add_irq_chip(chip->regmap, i2c->irq,
> - IRQF_TRIGGER_LOW | IRQF_ONESHOT | IRQF_SHARED,
> - -1, irq_chip,
> - &chip->regmap_irq);
> + trigger_type | IRQF_SHARED | IRQF_ONESHOT,
> + -1, irq_chip, &chip->regmap_irq);
> if (ret) {
> dev_err(chip->dev, "Failed to request IRQ %d: %d\n",
> i2c->irq, ret);
> --
> 2.20.1


2020-02-26 01:09:08

by Shreyas Joshi

[permalink] [raw]
Subject: [PATCH V6] mfd: da9062: Add support for interrupt polarity defined in device tree

The da9062 interrupt handler cannot necessarily be low active.
Add a function to configure the interrupt type based on what is defined in the device tree.
The allowable interrupt type is either low or high level trigger.

Signed-off-by: Shreyas Joshi <[email protected]>
---

V6:
Changed regmap_reg_range to exclude DA9062AA_CONFIG_B for writeable
Added regmap_reg_range DA9062AA_CONFIG_A for readable

V5:
Added #define for DA9062_IRQ_HIGH and DA9062_IRQ_LOW

V4:
Changed return code to EINVAL rather than EIO for incorrect irq type
Corrected regmap_update_bits usage

V3:
Changed regmap_write to regmap_update_bits

V2:
Added function to update the polarity of CONFIG_A IRQ_TYPE

drivers/mfd/da9062-core.c | 44 ++++++++++++++++++++++++++++++++++++---
1 file changed, 41 insertions(+), 3 deletions(-)

diff --git a/drivers/mfd/da9062-core.c b/drivers/mfd/da9062-core.c
index 419c73533401..fc30726e2e27 100644
--- a/drivers/mfd/da9062-core.c
+++ b/drivers/mfd/da9062-core.c
@@ -21,6 +21,9 @@
#define DA9062_REG_EVENT_B_OFFSET 1
#define DA9062_REG_EVENT_C_OFFSET 2

+#define DA9062_IRQ_LOW 0
+#define DA9062_IRQ_HIGH 1
+
static struct regmap_irq da9061_irqs[] = {
/* EVENT A */
[DA9061_IRQ_ONKEY] = {
@@ -369,6 +372,33 @@ static int da9062_get_device_type(struct da9062 *chip)
return ret;
}

+static u32 da9062_configure_irq_type(struct da9062 *chip, int irq, u32 *trigger)
+{
+ u32 irq_type = 0;
+ struct irq_data *irq_data = irq_get_irq_data(irq);
+
+ if (!irq_data) {
+ dev_err(chip->dev, "Invalid IRQ: %d\n", irq);
+ return -EINVAL;
+ }
+ *trigger = irqd_get_trigger_type(irq_data);
+
+ switch (*trigger) {
+ case IRQ_TYPE_LEVEL_HIGH:
+ irq_type = DA9062_IRQ_HIGH;
+ break;
+ case IRQ_TYPE_LEVEL_LOW:
+ irq_type = DA9062_IRQ_LOW;
+ break;
+ default:
+ dev_warn(chip->dev, "Unsupported IRQ type: %d\n", *trigger);
+ return -EINVAL;
+ }
+ return regmap_update_bits(chip->regmap, DA9062AA_CONFIG_A,
+ DA9062AA_IRQ_TYPE_MASK,
+ irq_type << DA9062AA_IRQ_TYPE_SHIFT);
+}
+
static const struct regmap_range da9061_aa_readable_ranges[] = {
regmap_reg_range(DA9062AA_PAGE_CON, DA9062AA_STATUS_B),
regmap_reg_range(DA9062AA_STATUS_D, DA9062AA_EVENT_C),
@@ -388,6 +418,7 @@ static const struct regmap_range da9061_aa_readable_ranges[] = {
regmap_reg_range(DA9062AA_VBUCK1_A, DA9062AA_VBUCK4_A),
regmap_reg_range(DA9062AA_VBUCK3_A, DA9062AA_VBUCK3_A),
regmap_reg_range(DA9062AA_VLDO1_A, DA9062AA_VLDO4_A),
+ regmap_reg_range(DA9062AA_CONFIG_A, DA9062AA_CONFIG_A),
regmap_reg_range(DA9062AA_VBUCK1_B, DA9062AA_VBUCK4_B),
regmap_reg_range(DA9062AA_VBUCK3_B, DA9062AA_VBUCK3_B),
regmap_reg_range(DA9062AA_VLDO1_B, DA9062AA_VLDO4_B),
@@ -417,6 +448,7 @@ static const struct regmap_range da9061_aa_writeable_ranges[] = {
regmap_reg_range(DA9062AA_VBUCK1_A, DA9062AA_VBUCK4_A),
regmap_reg_range(DA9062AA_VBUCK3_A, DA9062AA_VBUCK3_A),
regmap_reg_range(DA9062AA_VLDO1_A, DA9062AA_VLDO4_A),
+ regmap_reg_range(DA9062AA_CONFIG_A, DA9062AA_CONFIG_A),
regmap_reg_range(DA9062AA_VBUCK1_B, DA9062AA_VBUCK4_B),
regmap_reg_range(DA9062AA_VBUCK3_B, DA9062AA_VBUCK3_B),
regmap_reg_range(DA9062AA_VLDO1_B, DA9062AA_VLDO4_B),
@@ -596,6 +628,7 @@ static int da9062_i2c_probe(struct i2c_client *i2c,
const struct regmap_irq_chip *irq_chip;
const struct regmap_config *config;
int cell_num;
+ u32 trigger_type = 0;
int ret;

chip = devm_kzalloc(&i2c->dev, sizeof(*chip), GFP_KERNEL);
@@ -654,10 +687,15 @@ static int da9062_i2c_probe(struct i2c_client *i2c,
if (ret)
return ret;

+ ret = da9062_configure_irq_type(chip, i2c->irq, &trigger_type);
+ if (ret < 0) {
+ dev_err(chip->dev, "Failed to configure IRQ type\n");
+ return ret;
+ }
+
ret = regmap_add_irq_chip(chip->regmap, i2c->irq,
- IRQF_TRIGGER_LOW | IRQF_ONESHOT | IRQF_SHARED,
- -1, irq_chip,
- &chip->regmap_irq);
+ trigger_type | IRQF_SHARED | IRQF_ONESHOT,
+ -1, irq_chip, &chip->regmap_irq);
if (ret) {
dev_err(chip->dev, "Failed to request IRQ %d: %d\n",
i2c->irq, ret);
--
2.20.1

2020-02-28 12:16:47

by Adam Thomson

[permalink] [raw]
Subject: RE: [PATCH V6] mfd: da9062: Add support for interrupt polarity defined in device tree

On 26 February 2020 01:21, Shreyas Joshi wrote:

> The da9062 interrupt handler cannot necessarily be low active.
> Add a function to configure the interrupt type based on what is defined in the
> device tree.
> The allowable interrupt type is either low or high level trigger.
>
> Signed-off-by: Shreyas Joshi <[email protected]>

Thanks for persisting:

Reviewed-by: Adam Thomson <[email protected]>

> ---
>
> V6:
> Changed regmap_reg_range to exclude DA9062AA_CONFIG_B for writeable
> Added regmap_reg_range DA9062AA_CONFIG_A for readable
>
> V5:
> Added #define for DA9062_IRQ_HIGH and DA9062_IRQ_LOW
>
> V4:
> Changed return code to EINVAL rather than EIO for incorrect irq type
> Corrected regmap_update_bits usage
>
> V3:
> Changed regmap_write to regmap_update_bits
>
> V2:
> Added function to update the polarity of CONFIG_A IRQ_TYPE
>
> drivers/mfd/da9062-core.c | 44 ++++++++++++++++++++++++++++++++++++--
> -
> 1 file changed, 41 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/mfd/da9062-core.c b/drivers/mfd/da9062-core.c
> index 419c73533401..fc30726e2e27 100644
> --- a/drivers/mfd/da9062-core.c
> +++ b/drivers/mfd/da9062-core.c
> @@ -21,6 +21,9 @@
> #define DA9062_REG_EVENT_B_OFFSET 1
> #define DA9062_REG_EVENT_C_OFFSET 2
>
> +#define DA9062_IRQ_LOW 0
> +#define DA9062_IRQ_HIGH 1
> +
> static struct regmap_irq da9061_irqs[] = {
> /* EVENT A */
> [DA9061_IRQ_ONKEY] = {
> @@ -369,6 +372,33 @@ static int da9062_get_device_type(struct da9062 *chip)
> return ret;
> }
>
> +static u32 da9062_configure_irq_type(struct da9062 *chip, int irq, u32 *trigger)
> +{
> + u32 irq_type = 0;
> + struct irq_data *irq_data = irq_get_irq_data(irq);
> +
> + if (!irq_data) {
> + dev_err(chip->dev, "Invalid IRQ: %d\n", irq);
> + return -EINVAL;
> + }
> + *trigger = irqd_get_trigger_type(irq_data);
> +
> + switch (*trigger) {
> + case IRQ_TYPE_LEVEL_HIGH:
> + irq_type = DA9062_IRQ_HIGH;
> + break;
> + case IRQ_TYPE_LEVEL_LOW:
> + irq_type = DA9062_IRQ_LOW;
> + break;
> + default:
> + dev_warn(chip->dev, "Unsupported IRQ type: %d\n", *trigger);
> + return -EINVAL;
> + }
> + return regmap_update_bits(chip->regmap, DA9062AA_CONFIG_A,
> + DA9062AA_IRQ_TYPE_MASK,
> + irq_type << DA9062AA_IRQ_TYPE_SHIFT);
> +}
> +
> static const struct regmap_range da9061_aa_readable_ranges[] = {
> regmap_reg_range(DA9062AA_PAGE_CON, DA9062AA_STATUS_B),
> regmap_reg_range(DA9062AA_STATUS_D, DA9062AA_EVENT_C),
> @@ -388,6 +418,7 @@ static const struct regmap_range
> da9061_aa_readable_ranges[] = {
> regmap_reg_range(DA9062AA_VBUCK1_A, DA9062AA_VBUCK4_A),
> regmap_reg_range(DA9062AA_VBUCK3_A, DA9062AA_VBUCK3_A),
> regmap_reg_range(DA9062AA_VLDO1_A, DA9062AA_VLDO4_A),
> + regmap_reg_range(DA9062AA_CONFIG_A, DA9062AA_CONFIG_A),
> regmap_reg_range(DA9062AA_VBUCK1_B, DA9062AA_VBUCK4_B),
> regmap_reg_range(DA9062AA_VBUCK3_B, DA9062AA_VBUCK3_B),
> regmap_reg_range(DA9062AA_VLDO1_B, DA9062AA_VLDO4_B),
> @@ -417,6 +448,7 @@ static const struct regmap_range
> da9061_aa_writeable_ranges[] = {
> regmap_reg_range(DA9062AA_VBUCK1_A, DA9062AA_VBUCK4_A),
> regmap_reg_range(DA9062AA_VBUCK3_A, DA9062AA_VBUCK3_A),
> regmap_reg_range(DA9062AA_VLDO1_A, DA9062AA_VLDO4_A),
> + regmap_reg_range(DA9062AA_CONFIG_A, DA9062AA_CONFIG_A),
> regmap_reg_range(DA9062AA_VBUCK1_B, DA9062AA_VBUCK4_B),
> regmap_reg_range(DA9062AA_VBUCK3_B, DA9062AA_VBUCK3_B),
> regmap_reg_range(DA9062AA_VLDO1_B, DA9062AA_VLDO4_B),
> @@ -596,6 +628,7 @@ static int da9062_i2c_probe(struct i2c_client *i2c,
> const struct regmap_irq_chip *irq_chip;
> const struct regmap_config *config;
> int cell_num;
> + u32 trigger_type = 0;
> int ret;
>
> chip = devm_kzalloc(&i2c->dev, sizeof(*chip), GFP_KERNEL);
> @@ -654,10 +687,15 @@ static int da9062_i2c_probe(struct i2c_client *i2c,
> if (ret)
> return ret;
>
> + ret = da9062_configure_irq_type(chip, i2c->irq, &trigger_type);
> + if (ret < 0) {
> + dev_err(chip->dev, "Failed to configure IRQ type\n");
> + return ret;
> + }
> +
> ret = regmap_add_irq_chip(chip->regmap, i2c->irq,
> - IRQF_TRIGGER_LOW | IRQF_ONESHOT | IRQF_SHARED,
> - -1, irq_chip,
> - &chip->regmap_irq);
> + trigger_type | IRQF_SHARED | IRQF_ONESHOT,
> + -1, irq_chip, &chip->regmap_irq);
> if (ret) {
> dev_err(chip->dev, "Failed to request IRQ %d: %d\n",
> i2c->irq, ret);
> --
> 2.20.1

2020-02-28 17:05:51

by Linus Walleij

[permalink] [raw]
Subject: Re: [PATCH V6] mfd: da9062: Add support for interrupt polarity defined in device tree

On Wed, Feb 26, 2020 at 2:08 AM Shreyas Joshi <[email protected]> wrote:

> The da9062 interrupt handler cannot necessarily be low active.
> Add a function to configure the interrupt type based on what is defined in the device tree.
> The allowable interrupt type is either low or high level trigger.
>
> Signed-off-by: Shreyas Joshi <[email protected]>
> ---
>
> V6:
> Changed regmap_reg_range to exclude DA9062AA_CONFIG_B for writeable
> Added regmap_reg_range DA9062AA_CONFIG_A for readable

Reviewed-by: Linus Walleij <[email protected]>

Yours,
Linus Walleij

2020-03-20 09:38:03

by Adam Thomson

[permalink] [raw]
Subject: RE: [PATCH V6] mfd: da9062: Add support for interrupt polarity defined in device tree

On 17 March 2020 02:11, Shreyas Joshi wrote:

> Thanks for the review! Has it already merged now?
> I am using this link to see my patch
> - https://lore.kernel.org/patchwork/patch/1200436/
> I am not aware of the process like how it goes to the mainline.

When Lee has had time to review and accepts the change he will send an e-mail
confirming. As far as I'm aware this hasn't yet happened.

Also check his fork of the kernel as well:

https://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git/

>
> Thanks
> Shreyas Joshi
>
>
> -----Original Message-----
> From: Shreyas Joshi <[email protected]>
> Sent: Wednesday, 26 February 2020 11:22 AM
> To: [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]
> Cc: [email protected]; Shreyas Joshi <[email protected]>
> Subject: [PATCH V6] mfd: da9062: Add support for interrupt polarity defined in
> device tree
>
> The da9062 interrupt handler cannot necessarily be low active.
> Add a function to configure the interrupt type based on what is defined in the
> device tree.
> The allowable interrupt type is either low or high level trigger.
>
> Signed-off-by: Shreyas Joshi <[email protected]>
> ---
>
> V6:
> Changed regmap_reg_range to exclude DA9062AA_CONFIG_B for writeable
> Added regmap_reg_range DA9062AA_CONFIG_A for readable
>
> V5:
> Added #define for DA9062_IRQ_HIGH and DA9062_IRQ_LOW
>
> V4:
> Changed return code to EINVAL rather than EIO for incorrect irq type
> Corrected regmap_update_bits usage
>
> V3:
> Changed regmap_write to regmap_update_bits
>
> V2:
> Added function to update the polarity of CONFIG_A IRQ_TYPE
>
> drivers/mfd/da9062-core.c | 44 ++++++++++++++++++++++++++++++++++++--
> -
> 1 file changed, 41 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/mfd/da9062-core.c b/drivers/mfd/da9062-core.c index
> 419c73533401..fc30726e2e27 100644
> --- a/drivers/mfd/da9062-core.c
> +++ b/drivers/mfd/da9062-core.c
> @@ -21,6 +21,9 @@
> #define DA9062_REG_EVENT_B_OFFSET 1
> #define DA9062_REG_EVENT_C_OFFSET 2
>
> +#define DA9062_IRQ_LOW 0
> +#define DA9062_IRQ_HIGH 1
> +
> static struct regmap_irq da9061_irqs[] = {
> /* EVENT A */
> [DA9061_IRQ_ONKEY] = {
> @@ -369,6 +372,33 @@ static int da9062_get_device_type(struct da9062 *chip)
> return ret;
> }
>
> +static u32 da9062_configure_irq_type(struct da9062 *chip, int irq, u32
> +*trigger) {
> + u32 irq_type = 0;
> + struct irq_data *irq_data = irq_get_irq_data(irq);
> +
> + if (!irq_data) {
> + dev_err(chip->dev, "Invalid IRQ: %d\n", irq);
> + return -EINVAL;
> + }
> + *trigger = irqd_get_trigger_type(irq_data);
> +
> + switch (*trigger) {
> + case IRQ_TYPE_LEVEL_HIGH:
> + irq_type = DA9062_IRQ_HIGH;
> + break;
> + case IRQ_TYPE_LEVEL_LOW:
> + irq_type = DA9062_IRQ_LOW;
> + break;
> + default:
> + dev_warn(chip->dev, "Unsupported IRQ type: %d\n", *trigger);
> + return -EINVAL;
> + }
> + return regmap_update_bits(chip->regmap, DA9062AA_CONFIG_A,
> + DA9062AA_IRQ_TYPE_MASK,
> + irq_type << DA9062AA_IRQ_TYPE_SHIFT); }
> +
> static const struct regmap_range da9061_aa_readable_ranges[] = {
> regmap_reg_range(DA9062AA_PAGE_CON, DA9062AA_STATUS_B),
> regmap_reg_range(DA9062AA_STATUS_D, DA9062AA_EVENT_C), @@ -
> 388,6 +418,7 @@ static const struct regmap_range da9061_aa_readable_ranges[]
> = {
> regmap_reg_range(DA9062AA_VBUCK1_A, DA9062AA_VBUCK4_A),
> regmap_reg_range(DA9062AA_VBUCK3_A, DA9062AA_VBUCK3_A),
> regmap_reg_range(DA9062AA_VLDO1_A, DA9062AA_VLDO4_A),
> + regmap_reg_range(DA9062AA_CONFIG_A, DA9062AA_CONFIG_A),
> regmap_reg_range(DA9062AA_VBUCK1_B, DA9062AA_VBUCK4_B),
> regmap_reg_range(DA9062AA_VBUCK3_B, DA9062AA_VBUCK3_B),
> regmap_reg_range(DA9062AA_VLDO1_B, DA9062AA_VLDO4_B), @@ -
> 417,6 +448,7 @@ static const struct regmap_range
> da9061_aa_writeable_ranges[] = {
> regmap_reg_range(DA9062AA_VBUCK1_A, DA9062AA_VBUCK4_A),
> regmap_reg_range(DA9062AA_VBUCK3_A, DA9062AA_VBUCK3_A),
> regmap_reg_range(DA9062AA_VLDO1_A, DA9062AA_VLDO4_A),
> + regmap_reg_range(DA9062AA_CONFIG_A, DA9062AA_CONFIG_A),
> regmap_reg_range(DA9062AA_VBUCK1_B, DA9062AA_VBUCK4_B),
> regmap_reg_range(DA9062AA_VBUCK3_B, DA9062AA_VBUCK3_B),
> regmap_reg_range(DA9062AA_VLDO1_B, DA9062AA_VLDO4_B), @@ -
> 596,6 +628,7 @@ static int da9062_i2c_probe(struct i2c_client *i2c,
> const struct regmap_irq_chip *irq_chip;
> const struct regmap_config *config;
> int cell_num;
> + u32 trigger_type = 0;
> int ret;
>
> chip = devm_kzalloc(&i2c->dev, sizeof(*chip), GFP_KERNEL); @@ -654,10
> +687,15 @@ static int da9062_i2c_probe(struct i2c_client *i2c,
> if (ret)
> return ret;
>
> + ret = da9062_configure_irq_type(chip, i2c->irq, &trigger_type);
> + if (ret < 0) {
> + dev_err(chip->dev, "Failed to configure IRQ type\n");
> + return ret;
> + }
> +
> ret = regmap_add_irq_chip(chip->regmap, i2c->irq,
> - IRQF_TRIGGER_LOW | IRQF_ONESHOT | IRQF_SHARED,
> - -1, irq_chip,
> - &chip->regmap_irq);
> + trigger_type | IRQF_SHARED | IRQF_ONESHOT,
> + -1, irq_chip, &chip->regmap_irq);
> if (ret) {
> dev_err(chip->dev, "Failed to request IRQ %d: %d\n",
> i2c->irq, ret);
> --
> 2.20.1

2020-03-24 11:05:53

by Lee Jones

[permalink] [raw]
Subject: Re: [PATCH V6] mfd: da9062: Add support for interrupt polarity defined in device tree

On Wed, 26 Feb 2020, Shreyas Joshi wrote:

> The da9062 interrupt handler cannot necessarily be low active.
> Add a function to configure the interrupt type based on what is defined in the device tree.
> The allowable interrupt type is either low or high level trigger.
>
> Signed-off-by: Shreyas Joshi <[email protected]>
> ---
>
> V6:
> Changed regmap_reg_range to exclude DA9062AA_CONFIG_B for writeable
> Added regmap_reg_range DA9062AA_CONFIG_A for readable
>
> V5:
> Added #define for DA9062_IRQ_HIGH and DA9062_IRQ_LOW
>
> V4:
> Changed return code to EINVAL rather than EIO for incorrect irq type
> Corrected regmap_update_bits usage
>
> V3:
> Changed regmap_write to regmap_update_bits
>
> V2:
> Added function to update the polarity of CONFIG_A IRQ_TYPE
>
> drivers/mfd/da9062-core.c | 44 ++++++++++++++++++++++++++++++++++++---
> 1 file changed, 41 insertions(+), 3 deletions(-)

Applied, thanks.

--
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog