Re: [PATCH v3 3/4] mfd: intel_soc_pmic: Crystal Cove support

2014-05-27 Thread Lee Jones
On Tue, 27 May 2014, Zhu, Lejun wrote:

> Crystal Cove is the PMIC in Baytrail-T platform. This patch provides 
> chip-specific support for Crystal Cove.
> 
> v2:
> - Add regmap_config for Crystal Cove.
> v3:
> - Convert IRQ config to regmap_irq_chip.

Same comments about the commit log as before.

> Signed-off-by: Yang, Bin 
> Signed-off-by: Zhu, Lejun 
> ---
>  drivers/mfd/intel_soc_pmic_crc.c | 175 
> +++
>  1 file changed, 175 insertions(+)
>  create mode 100644 drivers/mfd/intel_soc_pmic_crc.c
> 
> diff --git a/drivers/mfd/intel_soc_pmic_crc.c 
> b/drivers/mfd/intel_soc_pmic_crc.c
> new file mode 100644
> index 000..341ab02
> --- /dev/null
> +++ b/drivers/mfd/intel_soc_pmic_crc.c
> @@ -0,0 +1,175 @@
> +/*
> + * intel_soc_pmic_crc.c - Device access for Crystal Cove PMIC
> + *
> + * Copyright (C) 2013, 2014 Intel Corporation. All rights reserved.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License version
> + * 2 as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * Author: Yang, Bin 
> + */
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include "intel_soc_pmic_core.h"

Please review these.

> +#define  CHIP_NAME   "Crystal Cove"

Don't do this.  Just use the name in the correct places.

> +#define CRYSTAL_COVE_MAX_REGISTER0xC6
> +
> +#define CHIPID   0x00
> +#define CHIPVER  0x01
> +#define IRQLVL1  0x02
> +#define MIRQLVL1 0x0E
> +
> +enum {
> + PWRSRC_IRQ = 0,
> + THRM_IRQ,
> + BCU_IRQ,
> + ADC_IRQ,
> + CHGR_IRQ,
> + GPIO_IRQ,
> + VHDMIOCP_IRQ
> +};
> +
> +static struct resource gpio_resources[] = {
> + {
> + .name   = "GPIO",
> + .start  = GPIO_IRQ,
> + .end= GPIO_IRQ,
> + .flags  = IORESOURCE_IRQ,
> + },
> +};
> +
> +static struct resource pwrsrc_resources[] = {
> + {
> + .name  = "PWRSRC",
> + .start = PWRSRC_IRQ,
> + .end   = PWRSRC_IRQ,
> + .flags = IORESOURCE_IRQ,
> + },
> +};
> +
> +static struct resource adc_resources[] = {
> + {
> + .name  = "ADC",
> + .start = ADC_IRQ,
> + .end   = ADC_IRQ,
> + .flags = IORESOURCE_IRQ,
> + },
> +};
> +
> +static struct resource thermal_resources[] = {
> + {
> + .name  = "THERMAL",
> + .start = THRM_IRQ,
> + .end   = THRM_IRQ,
> + .flags = IORESOURCE_IRQ,
> + },
> +};
> +
> +static struct resource bcu_resources[] = {
> + {
> + .name  = "BCU",
> + .start = BCU_IRQ,
> + .end   = BCU_IRQ,
> + .flags = IORESOURCE_IRQ,
> + },
> +};
> +
> +static struct mfd_cell crystal_cove_dev[] = {
> + {
> + .name = "crystal_cove_pwrsrc",
> + .id = 0,
> + .num_resources = ARRAY_SIZE(pwrsrc_resources),
> + .resources = pwrsrc_resources,
> + },
> + {
> + .name = "crystal_cove_adc",
> + .id = 0,
> + .num_resources = ARRAY_SIZE(adc_resources),
> + .resources = adc_resources,
> + },
> + {
> + .name = "crystal_cove_thermal",
> + .id = 0,
> + .num_resources = ARRAY_SIZE(thermal_resources),
> + .resources = thermal_resources,
> + },
> + {
> + .name = "crystal_cove_bcu",
> + .id = 0,
> + .num_resources = ARRAY_SIZE(bcu_resources),
> + .resources = bcu_resources,
> + },
> + {
> + .name = "crystal_cove_gpio",
> + .id = 0,
> + .num_resources = ARRAY_SIZE(gpio_resources),
> + .resources = gpio_resources,
> + },
> +};

You can remove the id field.

> +static struct regmap_config crystal_cove_regmap_config = {
> + .reg_bits = 8,
> + .val_bits = 8,
> +
> + .max_register = CRYSTAL_COVE_MAX_REGISTER,
> + .cache_type = REGCACHE_NONE,
> +};
> +
> +#define  CRC_REGMAP_IRQ_VALUE(irq)   {   \
> + .reg_offset = 0,\
> + .mask = BIT(irq),   \
> + }

Can you sort out the whitespace here?

> +static const struct regmap_irq crystal_cove_irqs[] = {
> + [PWRSRC_IRQ]= CRC_REGMAP_IRQ_VALUE(PWRSRC_IRQ),
> + [THRM_IRQ]  = CRC_REGMAP_IRQ_VALUE(THRM_IRQ),
> + [BCU_IRQ]   = CRC_REGMAP_IRQ_VALUE(BCU_IRQ),
> + [ADC_IRQ]   = 

Re: [PATCH v3 3/4] mfd: intel_soc_pmic: Crystal Cove support

2014-05-27 Thread Lee Jones
On Tue, 27 May 2014, Zhu, Lejun wrote:

 Crystal Cove is the PMIC in Baytrail-T platform. This patch provides 
 chip-specific support for Crystal Cove.
 
 v2:
 - Add regmap_config for Crystal Cove.
 v3:
 - Convert IRQ config to regmap_irq_chip.

Same comments about the commit log as before.

 Signed-off-by: Yang, Bin bin.y...@intel.com
 Signed-off-by: Zhu, Lejun lejun@linux.intel.com
 ---
  drivers/mfd/intel_soc_pmic_crc.c | 175 
 +++
  1 file changed, 175 insertions(+)
  create mode 100644 drivers/mfd/intel_soc_pmic_crc.c
 
 diff --git a/drivers/mfd/intel_soc_pmic_crc.c 
 b/drivers/mfd/intel_soc_pmic_crc.c
 new file mode 100644
 index 000..341ab02
 --- /dev/null
 +++ b/drivers/mfd/intel_soc_pmic_crc.c
 @@ -0,0 +1,175 @@
 +/*
 + * intel_soc_pmic_crc.c - Device access for Crystal Cove PMIC
 + *
 + * Copyright (C) 2013, 2014 Intel Corporation. All rights reserved.
 + *
 + * This program is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU General Public License version
 + * 2 as published by the Free Software Foundation.
 + *
 + * This program is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 + * GNU General Public License for more details.
 + *
 + * Author: Yang, Bin bin.y...@intel.com
 + */
 +
 +#include linux/kernel.h
 +#include linux/module.h
 +#include linux/delay.h
 +#include linux/mfd/core.h
 +#include linux/err.h
 +#include linux/i2c.h
 +#include linux/irq.h
 +#include linux/interrupt.h
 +#include linux/acpi.h
 +#include linux/version.h
 +#include linux/regmap.h
 +#include linux/mfd/intel_soc_pmic.h
 +#include intel_soc_pmic_core.h

Please review these.

 +#define  CHIP_NAME   Crystal Cove

Don't do this.  Just use the name in the correct places.

 +#define CRYSTAL_COVE_MAX_REGISTER0xC6
 +
 +#define CHIPID   0x00
 +#define CHIPVER  0x01
 +#define IRQLVL1  0x02
 +#define MIRQLVL1 0x0E
 +
 +enum {
 + PWRSRC_IRQ = 0,
 + THRM_IRQ,
 + BCU_IRQ,
 + ADC_IRQ,
 + CHGR_IRQ,
 + GPIO_IRQ,
 + VHDMIOCP_IRQ
 +};
 +
 +static struct resource gpio_resources[] = {
 + {
 + .name   = GPIO,
 + .start  = GPIO_IRQ,
 + .end= GPIO_IRQ,
 + .flags  = IORESOURCE_IRQ,
 + },
 +};
 +
 +static struct resource pwrsrc_resources[] = {
 + {
 + .name  = PWRSRC,
 + .start = PWRSRC_IRQ,
 + .end   = PWRSRC_IRQ,
 + .flags = IORESOURCE_IRQ,
 + },
 +};
 +
 +static struct resource adc_resources[] = {
 + {
 + .name  = ADC,
 + .start = ADC_IRQ,
 + .end   = ADC_IRQ,
 + .flags = IORESOURCE_IRQ,
 + },
 +};
 +
 +static struct resource thermal_resources[] = {
 + {
 + .name  = THERMAL,
 + .start = THRM_IRQ,
 + .end   = THRM_IRQ,
 + .flags = IORESOURCE_IRQ,
 + },
 +};
 +
 +static struct resource bcu_resources[] = {
 + {
 + .name  = BCU,
 + .start = BCU_IRQ,
 + .end   = BCU_IRQ,
 + .flags = IORESOURCE_IRQ,
 + },
 +};
 +
 +static struct mfd_cell crystal_cove_dev[] = {
 + {
 + .name = crystal_cove_pwrsrc,
 + .id = 0,
 + .num_resources = ARRAY_SIZE(pwrsrc_resources),
 + .resources = pwrsrc_resources,
 + },
 + {
 + .name = crystal_cove_adc,
 + .id = 0,
 + .num_resources = ARRAY_SIZE(adc_resources),
 + .resources = adc_resources,
 + },
 + {
 + .name = crystal_cove_thermal,
 + .id = 0,
 + .num_resources = ARRAY_SIZE(thermal_resources),
 + .resources = thermal_resources,
 + },
 + {
 + .name = crystal_cove_bcu,
 + .id = 0,
 + .num_resources = ARRAY_SIZE(bcu_resources),
 + .resources = bcu_resources,
 + },
 + {
 + .name = crystal_cove_gpio,
 + .id = 0,
 + .num_resources = ARRAY_SIZE(gpio_resources),
 + .resources = gpio_resources,
 + },
 +};

You can remove the id field.

 +static struct regmap_config crystal_cove_regmap_config = {
 + .reg_bits = 8,
 + .val_bits = 8,
 +
 + .max_register = CRYSTAL_COVE_MAX_REGISTER,
 + .cache_type = REGCACHE_NONE,
 +};
 +
 +#define  CRC_REGMAP_IRQ_VALUE(irq)   {   \
 + .reg_offset = 0,\
 + .mask = BIT(irq),   \
 + }

Can you sort out the whitespace here?

 +static const struct regmap_irq crystal_cove_irqs[] = {
 + [PWRSRC_IRQ]= CRC_REGMAP_IRQ_VALUE(PWRSRC_IRQ),
 + [THRM_IRQ]  = CRC_REGMAP_IRQ_VALUE(THRM_IRQ),
 + [BCU_IRQ]   = CRC_REGMAP_IRQ_VALUE(BCU_IRQ),
 + 

[PATCH v3 3/4] mfd: intel_soc_pmic: Crystal Cove support

2014-05-26 Thread Zhu, Lejun
Crystal Cove is the PMIC in Baytrail-T platform. This patch provides 
chip-specific support for Crystal Cove.

v2:
- Add regmap_config for Crystal Cove.
v3:
- Convert IRQ config to regmap_irq_chip.

Signed-off-by: Yang, Bin 
Signed-off-by: Zhu, Lejun 
---
 drivers/mfd/intel_soc_pmic_crc.c | 175 +++
 1 file changed, 175 insertions(+)
 create mode 100644 drivers/mfd/intel_soc_pmic_crc.c

diff --git a/drivers/mfd/intel_soc_pmic_crc.c b/drivers/mfd/intel_soc_pmic_crc.c
new file mode 100644
index 000..341ab02
--- /dev/null
+++ b/drivers/mfd/intel_soc_pmic_crc.c
@@ -0,0 +1,175 @@
+/*
+ * intel_soc_pmic_crc.c - Device access for Crystal Cove PMIC
+ *
+ * Copyright (C) 2013, 2014 Intel Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version
+ * 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * Author: Yang, Bin 
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include "intel_soc_pmic_core.h"
+
+#defineCHIP_NAME   "Crystal Cove"
+#define CRYSTAL_COVE_MAX_REGISTER  0xC6
+
+#define CHIPID 0x00
+#define CHIPVER0x01
+#define IRQLVL10x02
+#define MIRQLVL1   0x0E
+
+enum {
+   PWRSRC_IRQ = 0,
+   THRM_IRQ,
+   BCU_IRQ,
+   ADC_IRQ,
+   CHGR_IRQ,
+   GPIO_IRQ,
+   VHDMIOCP_IRQ
+};
+
+static struct resource gpio_resources[] = {
+   {
+   .name   = "GPIO",
+   .start  = GPIO_IRQ,
+   .end= GPIO_IRQ,
+   .flags  = IORESOURCE_IRQ,
+   },
+};
+
+static struct resource pwrsrc_resources[] = {
+   {
+   .name  = "PWRSRC",
+   .start = PWRSRC_IRQ,
+   .end   = PWRSRC_IRQ,
+   .flags = IORESOURCE_IRQ,
+   },
+};
+
+static struct resource adc_resources[] = {
+   {
+   .name  = "ADC",
+   .start = ADC_IRQ,
+   .end   = ADC_IRQ,
+   .flags = IORESOURCE_IRQ,
+   },
+};
+
+static struct resource thermal_resources[] = {
+   {
+   .name  = "THERMAL",
+   .start = THRM_IRQ,
+   .end   = THRM_IRQ,
+   .flags = IORESOURCE_IRQ,
+   },
+};
+
+static struct resource bcu_resources[] = {
+   {
+   .name  = "BCU",
+   .start = BCU_IRQ,
+   .end   = BCU_IRQ,
+   .flags = IORESOURCE_IRQ,
+   },
+};
+
+static struct mfd_cell crystal_cove_dev[] = {
+   {
+   .name = "crystal_cove_pwrsrc",
+   .id = 0,
+   .num_resources = ARRAY_SIZE(pwrsrc_resources),
+   .resources = pwrsrc_resources,
+   },
+   {
+   .name = "crystal_cove_adc",
+   .id = 0,
+   .num_resources = ARRAY_SIZE(adc_resources),
+   .resources = adc_resources,
+   },
+   {
+   .name = "crystal_cove_thermal",
+   .id = 0,
+   .num_resources = ARRAY_SIZE(thermal_resources),
+   .resources = thermal_resources,
+   },
+   {
+   .name = "crystal_cove_bcu",
+   .id = 0,
+   .num_resources = ARRAY_SIZE(bcu_resources),
+   .resources = bcu_resources,
+   },
+   {
+   .name = "crystal_cove_gpio",
+   .id = 0,
+   .num_resources = ARRAY_SIZE(gpio_resources),
+   .resources = gpio_resources,
+   },
+};
+
+static struct regmap_config crystal_cove_regmap_config = {
+   .reg_bits = 8,
+   .val_bits = 8,
+
+   .max_register = CRYSTAL_COVE_MAX_REGISTER,
+   .cache_type = REGCACHE_NONE,
+};
+
+#defineCRC_REGMAP_IRQ_VALUE(irq)   {   \
+   .reg_offset = 0,\
+   .mask = BIT(irq),   \
+   }
+
+static const struct regmap_irq crystal_cove_irqs[] = {
+   [PWRSRC_IRQ]= CRC_REGMAP_IRQ_VALUE(PWRSRC_IRQ),
+   [THRM_IRQ]  = CRC_REGMAP_IRQ_VALUE(THRM_IRQ),
+   [BCU_IRQ]   = CRC_REGMAP_IRQ_VALUE(BCU_IRQ),
+   [ADC_IRQ]   = CRC_REGMAP_IRQ_VALUE(ADC_IRQ),
+   [CHGR_IRQ]  = CRC_REGMAP_IRQ_VALUE(CHGR_IRQ),
+   [GPIO_IRQ]  = CRC_REGMAP_IRQ_VALUE(GPIO_IRQ),
+   [VHDMIOCP_IRQ]  = CRC_REGMAP_IRQ_VALUE(VHDMIOCP_IRQ),
+};
+
+static struct regmap_irq_chip crystal_cove_irq_chip = {
+   .name = CHIP_NAME,
+   .irqs = crystal_cove_irqs,
+   .num_irqs = ARRAY_SIZE(crystal_cove_irqs),
+   .num_regs = 1,
+   .status_base = 

[PATCH v3 3/4] mfd: intel_soc_pmic: Crystal Cove support

2014-05-26 Thread Zhu, Lejun
Crystal Cove is the PMIC in Baytrail-T platform. This patch provides 
chip-specific support for Crystal Cove.

v2:
- Add regmap_config for Crystal Cove.
v3:
- Convert IRQ config to regmap_irq_chip.

Signed-off-by: Yang, Bin bin.y...@intel.com
Signed-off-by: Zhu, Lejun lejun@linux.intel.com
---
 drivers/mfd/intel_soc_pmic_crc.c | 175 +++
 1 file changed, 175 insertions(+)
 create mode 100644 drivers/mfd/intel_soc_pmic_crc.c

diff --git a/drivers/mfd/intel_soc_pmic_crc.c b/drivers/mfd/intel_soc_pmic_crc.c
new file mode 100644
index 000..341ab02
--- /dev/null
+++ b/drivers/mfd/intel_soc_pmic_crc.c
@@ -0,0 +1,175 @@
+/*
+ * intel_soc_pmic_crc.c - Device access for Crystal Cove PMIC
+ *
+ * Copyright (C) 2013, 2014 Intel Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version
+ * 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * Author: Yang, Bin bin.y...@intel.com
+ */
+
+#include linux/kernel.h
+#include linux/module.h
+#include linux/delay.h
+#include linux/mfd/core.h
+#include linux/err.h
+#include linux/i2c.h
+#include linux/irq.h
+#include linux/interrupt.h
+#include linux/acpi.h
+#include linux/version.h
+#include linux/regmap.h
+#include linux/mfd/intel_soc_pmic.h
+#include intel_soc_pmic_core.h
+
+#defineCHIP_NAME   Crystal Cove
+#define CRYSTAL_COVE_MAX_REGISTER  0xC6
+
+#define CHIPID 0x00
+#define CHIPVER0x01
+#define IRQLVL10x02
+#define MIRQLVL1   0x0E
+
+enum {
+   PWRSRC_IRQ = 0,
+   THRM_IRQ,
+   BCU_IRQ,
+   ADC_IRQ,
+   CHGR_IRQ,
+   GPIO_IRQ,
+   VHDMIOCP_IRQ
+};
+
+static struct resource gpio_resources[] = {
+   {
+   .name   = GPIO,
+   .start  = GPIO_IRQ,
+   .end= GPIO_IRQ,
+   .flags  = IORESOURCE_IRQ,
+   },
+};
+
+static struct resource pwrsrc_resources[] = {
+   {
+   .name  = PWRSRC,
+   .start = PWRSRC_IRQ,
+   .end   = PWRSRC_IRQ,
+   .flags = IORESOURCE_IRQ,
+   },
+};
+
+static struct resource adc_resources[] = {
+   {
+   .name  = ADC,
+   .start = ADC_IRQ,
+   .end   = ADC_IRQ,
+   .flags = IORESOURCE_IRQ,
+   },
+};
+
+static struct resource thermal_resources[] = {
+   {
+   .name  = THERMAL,
+   .start = THRM_IRQ,
+   .end   = THRM_IRQ,
+   .flags = IORESOURCE_IRQ,
+   },
+};
+
+static struct resource bcu_resources[] = {
+   {
+   .name  = BCU,
+   .start = BCU_IRQ,
+   .end   = BCU_IRQ,
+   .flags = IORESOURCE_IRQ,
+   },
+};
+
+static struct mfd_cell crystal_cove_dev[] = {
+   {
+   .name = crystal_cove_pwrsrc,
+   .id = 0,
+   .num_resources = ARRAY_SIZE(pwrsrc_resources),
+   .resources = pwrsrc_resources,
+   },
+   {
+   .name = crystal_cove_adc,
+   .id = 0,
+   .num_resources = ARRAY_SIZE(adc_resources),
+   .resources = adc_resources,
+   },
+   {
+   .name = crystal_cove_thermal,
+   .id = 0,
+   .num_resources = ARRAY_SIZE(thermal_resources),
+   .resources = thermal_resources,
+   },
+   {
+   .name = crystal_cove_bcu,
+   .id = 0,
+   .num_resources = ARRAY_SIZE(bcu_resources),
+   .resources = bcu_resources,
+   },
+   {
+   .name = crystal_cove_gpio,
+   .id = 0,
+   .num_resources = ARRAY_SIZE(gpio_resources),
+   .resources = gpio_resources,
+   },
+};
+
+static struct regmap_config crystal_cove_regmap_config = {
+   .reg_bits = 8,
+   .val_bits = 8,
+
+   .max_register = CRYSTAL_COVE_MAX_REGISTER,
+   .cache_type = REGCACHE_NONE,
+};
+
+#defineCRC_REGMAP_IRQ_VALUE(irq)   {   \
+   .reg_offset = 0,\
+   .mask = BIT(irq),   \
+   }
+
+static const struct regmap_irq crystal_cove_irqs[] = {
+   [PWRSRC_IRQ]= CRC_REGMAP_IRQ_VALUE(PWRSRC_IRQ),
+   [THRM_IRQ]  = CRC_REGMAP_IRQ_VALUE(THRM_IRQ),
+   [BCU_IRQ]   = CRC_REGMAP_IRQ_VALUE(BCU_IRQ),
+   [ADC_IRQ]   = CRC_REGMAP_IRQ_VALUE(ADC_IRQ),
+   [CHGR_IRQ]  = CRC_REGMAP_IRQ_VALUE(CHGR_IRQ),
+   [GPIO_IRQ]  = CRC_REGMAP_IRQ_VALUE(GPIO_IRQ),
+   [VHDMIOCP_IRQ]  = CRC_REGMAP_IRQ_VALUE(VHDMIOCP_IRQ),
+};
+