ARM: dts: Add binding documentation for AXP152 PMIC
Subsystems (3)
PATCH v3 1/2 ARM: dts: Add binding documentation for AXP152 PMIC
Add devicetree binding documentation for the AXP152 PMIC, this is a stripped down version of the AXP202 PMIC with the battery charging function removed.
---
Changes in v2:
-New patch in v2 of this series
Changes in v3:
-Added Michal Suchanek's S-o-b (with his permission)
--- Documentation/devicetree/bindings/mfd/axp20x.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
Documentation/devicetree/bindings/mfd/axp20x.txt +3 -1
@@ -1,12 +1,14 @@ AXP family PMIC device tree bindings The axp20x family current members : +axp152 (X-Powers) axp202 (X-Powers) axp209 (X-Powers) axp221 (X-Powers) Required properties: -- compatible: "x-powers,axp202", "x-powers,axp209", "x-powers,axp221" +- compatible: "x-powers,axp152", "x-powers,axp202", "x-powers,axp209", + "x-powers,axp221" - reg: The I2C slave address for the AXP chip - interrupt-parent: The parent interrupt controller - interrupts: SoC NMI / GPIO interrupt connected to the PMIC's IRQ pin
Signature · 1 line
2.4.3
PATCH v3 2/2 mfd: axp20x: Add axp152 support
From: Michal Suchanek <[email protected]>
The axp152 is a stripped down version of the axp202 pmic with the battery charging function removed as it is intended for top-set boxes.
---
Changes in v2:
-Seperated out the devicetree binding documentation into a separate patch -Use DEFINE_RES_IRQ_NAMED to define the irq resources
Changes in v3:
-s/ax20x/axp20x/ in the commit msg
-Added Michal Suchanek's S-o-b (with his permission)
--- drivers/mfd/axp20x.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++ include/linux/mfd/axp20x.h | 61 +++++++++++++++++++++++++++++++++- 2 files changed, 143 insertions(+), 1 deletion(-)
drivers/mfd/axp20x.c +83 -0
@@ -30,12 +30,34 @@#define AXP20X_OFF 0x80static const char *const axp20x_model_names[] = { +"AXP152" ,"AXP202" ,"AXP209" ,"AXP221" ,"AXP288" , }; +static const struct regmap_range axp152_writeable_ranges[] = { +regmap_reg_range (AXP152_LDO3456_DC1234_CTRL ,AXP152_IRQ3_STATE ), +regmap_reg_range (AXP152_DCDC_MODE ,AXP152_PWM1_DUTY_CYCLE ), +}; + +static const struct regmap_range axp152_volatile_ranges[] = { +regmap_reg_range (AXP152_PWR_OP_MODE ,AXP152_PWR_OP_MODE ), +regmap_reg_range (AXP152_IRQ1_EN ,AXP152_IRQ3_STATE ), +regmap_reg_range (AXP152_GPIO_INPUT ,AXP152_GPIO_INPUT ), +}; + +static const struct regmap_access_table axp152_writeable_table = { + .yes_ranges = axp152_writeable_ranges, + .n_yes_ranges =ARRAY_SIZE (axp152_writeable_ranges), +}; + +static const struct regmap_access_table axp152_volatile_table = { + .yes_ranges = axp152_volatile_ranges, + .n_yes_ranges =ARRAY_SIZE (axp152_volatile_ranges), +}; +static const struct regmap_range axp20x_writeable_ranges[] = {regmap_reg_range (AXP20X_DATACACHE (0 ),AXP20X_IRQ5_STATE ),regmap_reg_range (AXP20X_DCDC_MODE ,AXP20X_FG_RES ),
@@ -99,6 +121,11 @@ static const struct regmap_access_table axp288_volatile_table = { .n_yes_ranges = ARRAY_SIZE(axp288_volatile_ranges), }; +static struct resource axp152_pek_resources[] = { +DEFINE_RES_IRQ_NAMED (AXP152_IRQ_PEK_RIS_EDGE ,"PEK_DBR" ), +DEFINE_RES_IRQ_NAMED (AXP152_IRQ_PEK_FAL_EDGE ,"PEK_DBF" ), +}; +static struct resource axp20x_pek_resources[] = { { .name ="PEK_DBR" ,
@@ -167,6 +194,15 @@ static struct resource axp288_fuel_gauge_resources[] = { }, }; +static const struct regmap_config axp152_regmap_config = { + .reg_bits =8 , + .val_bits =8 , + .wr_table = &axp152_writeable_table, + .volatile_table = &axp152_volatile_table, + .max_register =AXP152_PWM1_DUTY_CYCLE , + .cache_type =REGCACHE_RBTREE , +}; +static const struct regmap_config axp20x_regmap_config = { .reg_bits =8 , .val_bits =8 ,
@@ -197,6 +233,26 @@ static const struct regmap_config axp288_regmap_config = {#define INIT_REGMAP_IRQ (_variant, _irq, _off, _mask) \ [_variant##_IRQ_##_irq] = { .reg_offset = (_off), .mask = BIT(_mask) } +static const struct regmap_irq axp152_regmap_irqs[] = { +INIT_REGMAP_IRQ (AXP152 ,LDO0IN_CONNECT ,0 ,6 ), +INIT_REGMAP_IRQ (AXP152 ,LDO0IN_REMOVAL ,0 ,5 ), +INIT_REGMAP_IRQ (AXP152 ,ALDO0IN_CONNECT ,0 ,3 ), +INIT_REGMAP_IRQ (AXP152 ,ALDO0IN_REMOVAL ,0 ,2 ), +INIT_REGMAP_IRQ (AXP152 ,DCDC1_V_LOW ,1 ,5 ), +INIT_REGMAP_IRQ (AXP152 ,DCDC2_V_LOW ,1 ,4 ), +INIT_REGMAP_IRQ (AXP152 ,DCDC3_V_LOW ,1 ,3 ), +INIT_REGMAP_IRQ (AXP152 ,DCDC4_V_LOW ,1 ,2 ), +INIT_REGMAP_IRQ (AXP152 ,PEK_SHORT ,1 ,1 ), +INIT_REGMAP_IRQ (AXP152 ,PEK_LONG ,1 ,0 ), +INIT_REGMAP_IRQ (AXP152 ,TIMER ,2 ,7 ), +INIT_REGMAP_IRQ (AXP152 ,PEK_RIS_EDGE ,2 ,6 ), +INIT_REGMAP_IRQ (AXP152 ,PEK_FAL_EDGE ,2 ,5 ), +INIT_REGMAP_IRQ (AXP152 ,GPIO3_INPUT ,2 ,3 ), +INIT_REGMAP_IRQ (AXP152 ,GPIO2_INPUT ,2 ,2 ), +INIT_REGMAP_IRQ (AXP152 ,GPIO1_INPUT ,2 ,1 ), +INIT_REGMAP_IRQ (AXP152 ,GPIO0_INPUT ,2 ,0 ), +}; +static const struct regmap_irq axp20x_regmap_irqs[] = {INIT_REGMAP_IRQ (AXP20X ,ACIN_OVER_V ,0 ,7 ),INIT_REGMAP_IRQ (AXP20X ,ACIN_PLUGIN ,0 ,6 ),
@@ -306,6 +362,7 @@ static const struct regmap_irq axp288_regmap_irqs[] = { };static const struct of_device_id axp20x_of_match[] = { + { .compatible ="x-powers,axp152" , .data = (void *)AXP152_ID }, { .compatible ="x-powers,axp202" , .data = (void *)AXP202_ID }, { .compatible ="x-powers,axp209" , .data = (void *)AXP209_ID }, { .compatible ="x-powers,axp221" , .data = (void *)AXP221_ID },
@@ -330,6 +387,18 @@ static const struct acpi_device_id axp20x_acpi_match[] = { };MODULE_DEVICE_TABLE (acpi, axp20x_acpi_match); +static const struct regmap_irq_chip axp152_regmap_irq_chip = { + .name ="axp152_irq_chip" , + .status_base =AXP152_IRQ1_STATE , + .ack_base =AXP152_IRQ1_STATE , + .mask_base =AXP152_IRQ1_EN , + .mask_invert = true, + .init_ack_masked = true, + .irqs = axp152_regmap_irqs, + .num_irqs =ARRAY_SIZE (axp152_regmap_irqs), + .num_regs =3 , +}; +static const struct regmap_irq_chip axp20x_regmap_irq_chip = { .name ="axp20x_irq_chip" , .status_base =AXP20X_IRQ1_STATE ,
@@ -393,6 +462,14 @@ static struct mfd_cell axp22x_cells[] = { }, }; +static struct mfd_cell axp152_cells[] = { + { + .name ="axp20x-pek" , + .num_resources =ARRAY_SIZE (axp152_pek_resources), + .resources = axp152_pek_resources, + }, +}; +static struct resource axp288_adc_resources[] = { { .name ="GPADC" ,
@@ -531,6 +608,12 @@ static int axp20x_match_device(struct axp20x_dev *axp20x, struct device *dev) }switch (axp20x->variant) { +case AXP152_ID : + axp20x->nr_cells =ARRAY_SIZE (axp152_cells); + axp20x->cells = axp152_cells; + axp20x->regmap_cfg = &axp152_regmap_config; + axp20x->regmap_irq_chip = &axp152_regmap_irq_chip; +break ;case AXP202_ID :case AXP209_ID : axp20x->nr_cells =ARRAY_SIZE (axp20x_cells);
include/linux/mfd/axp20x.h +60 -1
91 lines not on this page · raw message
Signature · 1 line
2.4.3
Lee Jones
AppliedPATCH v3 2/2 mfd: axp20x: Add axp152 support
Quoted 13 lines · Hans de Goede
From: Michal Suchanek <[email protected]>
The axp152 is a stripped down version of the axp202 pmic with the battery charging function removed as it is intended for top-set boxes.
Signed-off-by Michal Suchanek <[email protected]>Signed-off-by Hans de Goede <[email protected]>Acked-by Lee Jones <[email protected]>---
Changes in v2:(quoted diff) +0
-2-Seperated out the devicetree binding documentation into a separate patch -Use DEFINE_RES_IRQ_NAMED to define the irq resourcesChanges in v3:
Review
Quoted 6 lines
(quoted diff) +0
-3-s/ax20x/axp20x/ in the commit msg -Added Michal Suchanek's S-o-b (with his permission) --- drivers/mfd/axp20x.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++ include/linux/mfd/axp20x.h | 61 +++++++++++++++++++++++++++++++++- 2 files changed, 143 insertions(+), 1 deletion(-)
Applied, thanks.
Quoted 249 lines
drivers/mfd/axp20x.c +83
-0@@ -30,12 +30,34 @@#define AXP20X_OFF 0x80static const char *const axp20x_model_names[] = { +"AXP152" ,"AXP202" ,"AXP209" ,"AXP221" ,"AXP288" , }; +static const struct regmap_range axp152_writeable_ranges[] = { +regmap_reg_range (AXP152_LDO3456_DC1234_CTRL ,AXP152_IRQ3_STATE ), +regmap_reg_range (AXP152_DCDC_MODE ,AXP152_PWM1_DUTY_CYCLE ), +}; + +static const struct regmap_range axp152_volatile_ranges[] = { +regmap_reg_range (AXP152_PWR_OP_MODE ,AXP152_PWR_OP_MODE ), +regmap_reg_range (AXP152_IRQ1_EN ,AXP152_IRQ3_STATE ), +regmap_reg_range (AXP152_GPIO_INPUT ,AXP152_GPIO_INPUT ), +}; + +static const struct regmap_access_table axp152_writeable_table = { + .yes_ranges = axp152_writeable_ranges, + .n_yes_ranges =ARRAY_SIZE (axp152_writeable_ranges), +}; + +static const struct regmap_access_table axp152_volatile_table = { + .yes_ranges = axp152_volatile_ranges, + .n_yes_ranges =ARRAY_SIZE (axp152_volatile_ranges), +}; +static const struct regmap_range axp20x_writeable_ranges[] = {regmap_reg_range (AXP20X_DATACACHE (0 ),AXP20X_IRQ5_STATE ),regmap_reg_range (AXP20X_DCDC_MODE ,AXP20X_FG_RES ),@@ -99,6 +121,11 @@ static const struct regmap_access_table axp288_volatile_table = { .n_yes_ranges = ARRAY_SIZE(axp288_volatile_ranges), }; +static struct resource axp152_pek_resources[] = { +DEFINE_RES_IRQ_NAMED (AXP152_IRQ_PEK_RIS_EDGE ,"PEK_DBR" ), +DEFINE_RES_IRQ_NAMED (AXP152_IRQ_PEK_FAL_EDGE ,"PEK_DBF" ), +}; +static struct resource axp20x_pek_resources[] = { { .name ="PEK_DBR" ,@@ -167,6 +194,15 @@ static struct resource axp288_fuel_gauge_resources[] = { }, }; +static const struct regmap_config axp152_regmap_config = { + .reg_bits =8 , + .val_bits =8 , + .wr_table = &axp152_writeable_table, + .volatile_table = &axp152_volatile_table, + .max_register =AXP152_PWM1_DUTY_CYCLE , + .cache_type =REGCACHE_RBTREE , +}; +static const struct regmap_config axp20x_regmap_config = { .reg_bits =8 , .val_bits =8 ,@@ -197,6 +233,26 @@ static const struct regmap_config axp288_regmap_config = {#define INIT_REGMAP_IRQ (_variant, _irq, _off, _mask) \ [_variant##_IRQ_##_irq] = { .reg_offset = (_off), .mask = BIT(_mask) } +static const struct regmap_irq axp152_regmap_irqs[] = { +INIT_REGMAP_IRQ (AXP152 ,LDO0IN_CONNECT ,0 ,6 ), +INIT_REGMAP_IRQ (AXP152 ,LDO0IN_REMOVAL ,0 ,5 ), +INIT_REGMAP_IRQ (AXP152 ,ALDO0IN_CONNECT ,0 ,3 ), +INIT_REGMAP_IRQ (AXP152 ,ALDO0IN_REMOVAL ,0 ,2 ), +INIT_REGMAP_IRQ (AXP152 ,DCDC1_V_LOW ,1 ,5 ), +INIT_REGMAP_IRQ (AXP152 ,DCDC2_V_LOW ,1 ,4 ), +INIT_REGMAP_IRQ (AXP152 ,DCDC3_V_LOW ,1 ,3 ), +INIT_REGMAP_IRQ (AXP152 ,DCDC4_V_LOW ,1 ,2 ), +INIT_REGMAP_IRQ (AXP152 ,PEK_SHORT ,1 ,1 ), +INIT_REGMAP_IRQ (AXP152 ,PEK_LONG ,1 ,0 ), +INIT_REGMAP_IRQ (AXP152 ,TIMER ,2 ,7 ), +INIT_REGMAP_IRQ (AXP152 ,PEK_RIS_EDGE ,2 ,6 ), +INIT_REGMAP_IRQ (AXP152 ,PEK_FAL_EDGE ,2 ,5 ), +INIT_REGMAP_IRQ (AXP152 ,GPIO3_INPUT ,2 ,3 ), +INIT_REGMAP_IRQ (AXP152 ,GPIO2_INPUT ,2 ,2 ), +INIT_REGMAP_IRQ (AXP152 ,GPIO1_INPUT ,2 ,1 ), +INIT_REGMAP_IRQ (AXP152 ,GPIO0_INPUT ,2 ,0 ), +}; +static const struct regmap_irq axp20x_regmap_irqs[] = {INIT_REGMAP_IRQ (AXP20X ,ACIN_OVER_V ,0 ,7 ),INIT_REGMAP_IRQ (AXP20X ,ACIN_PLUGIN ,0 ,6 ),@@ -306,6 +362,7 @@ static const struct regmap_irq axp288_regmap_irqs[] = { };static const struct of_device_id axp20x_of_match[] = { + { .compatible ="x-powers,axp152" , .data = (void *)AXP152_ID }, { .compatible ="x-powers,axp202" , .data = (void *)AXP202_ID }, { .compatible ="x-powers,axp209" , .data = (void *)AXP209_ID }, { .compatible ="x-powers,axp221" , .data = (void *)AXP221_ID },@@ -330,6 +387,18 @@ static const struct acpi_device_id axp20x_acpi_match[] = { };MODULE_DEVICE_TABLE (acpi, axp20x_acpi_match); +static const struct regmap_irq_chip axp152_regmap_irq_chip = { + .name ="axp152_irq_chip" , + .status_base =AXP152_IRQ1_STATE , + .ack_base =AXP152_IRQ1_STATE , + .mask_base =AXP152_IRQ1_EN , + .mask_invert = true, + .init_ack_masked = true, + .irqs = axp152_regmap_irqs, + .num_irqs =ARRAY_SIZE (axp152_regmap_irqs), + .num_regs =3 , +}; +static const struct regmap_irq_chip axp20x_regmap_irq_chip = { .name ="axp20x_irq_chip" , .status_base =AXP20X_IRQ1_STATE ,@@ -393,6 +462,14 @@ static struct mfd_cell axp22x_cells[] = { }, }; +static struct mfd_cell axp152_cells[] = { + { + .name ="axp20x-pek" , + .num_resources =ARRAY_SIZE (axp152_pek_resources), + .resources = axp152_pek_resources, + }, +}; +static struct resource axp288_adc_resources[] = { { .name ="GPADC" ,@@ -531,6 +608,12 @@ static int axp20x_match_device(struct axp20x_dev *axp20x, struct device *dev) }switch (axp20x->variant) { +case AXP152_ID : + axp20x->nr_cells =ARRAY_SIZE (axp152_cells); + axp20x->cells = axp152_cells; + axp20x->regmap_cfg = &axp152_regmap_config; + axp20x->regmap_irq_chip = &axp152_regmap_irq_chip; +break ;case AXP202_ID :case AXP209_ID : axp20x->nr_cells =ARRAY_SIZE (axp20x_cells);include/linux/mfd/axp20x.h +60
-1@@ -14,7 +14,8 @@#include <linux/regmap.h> enum { -AXP202_ID =0 , +AXP152_ID =0 , +AXP202_ID ,AXP209_ID ,AXP221_ID ,AXP288_ID ,@@ -24,6 +25,24 @@ enum {#define AXP20X_DATACACHE (m) (0x04 + (m))/* Power supply */ +#define AXP152_PWR_OP_MODE 0x01 +#define AXP152_LDO3456_DC1234_CTRL 0x12 +#define AXP152_ALDO_OP_MODE 0x13 +#define AXP152_LDO0_CTRL 0x15 +#define AXP152_DCDC2_V_OUT 0x23 +#define AXP152_DCDC2_V_SCAL 0x25 +#define AXP152_DCDC1_V_OUT 0x26 +#define AXP152_DCDC3_V_OUT 0x27 +#define AXP152_ALDO12_V_OUT 0x28 +#define AXP152_DLDO1_V_OUT 0x29 +#define AXP152_DLDO2_V_OUT 0x2a +#define AXP152_DCDC4_V_OUT 0x2b +#define AXP152_V_OFF 0x31 +#define AXP152_OFF_CTRL 0x32 +#define AXP152_PEK_KEY 0x36 +#define AXP152_DCDC_FREQ 0x37 +#define AXP152_DCDC_MODE 0x80 +#define AXP20X_PWR_INPUT_STATUS 0x00#define AXP20X_PWR_OP_MODE 0x01#define AXP20X_USB_OTG_STATUS 0x02@@ -71,6 +90,13 @@ enum {#define AXP22X_CHRG_CTRL3 0x35/* Interrupt */ +#define AXP152_IRQ1_EN 0x40 +#define AXP152_IRQ2_EN 0x41 +#define AXP152_IRQ3_EN 0x42 +#define AXP152_IRQ1_STATE 0x48 +#define AXP152_IRQ2_STATE 0x49 +#define AXP152_IRQ3_STATE 0x4a +#define AXP20X_IRQ1_EN 0x40#define AXP20X_IRQ2_EN 0x41#define AXP20X_IRQ3_EN 0x42@@ -129,6 +155,19 @@ enum {#define AXP22X_PWREN_CTRL2 0x8d/* GPIO */ +#define AXP152_GPIO0_CTRL 0x90 +#define AXP152_GPIO1_CTRL 0x91 +#define AXP152_GPIO2_CTRL 0x92 +#define AXP152_GPIO3_CTRL 0x93 +#define AXP152_LDOGPIO2_V_OUT 0x96 +#define AXP152_GPIO_INPUT 0x97 +#define AXP152_PWM0_FREQ_X 0x98 +#define AXP152_PWM0_FREQ_Y 0x99 +#define AXP152_PWM0_DUTY_CYCLE 0x9a +#define AXP152_PWM1_FREQ_X 0x9b +#define AXP152_PWM1_FREQ_Y 0x9c +#define AXP152_PWM1_DUTY_CYCLE 0x9d +#define AXP20X_GPIO0_CTRL 0x90#define AXP20X_LDO5_V_OUT 0x91#define AXP20X_GPIO1_CTRL 0x92@@ -226,6 +265,26 @@ enum {/* IRQs */ enum { +AXP152_IRQ_LDO0IN_CONNECT =1 , +AXP152_IRQ_LDO0IN_REMOVAL , +AXP152_IRQ_ALDO0IN_CONNECT , +AXP152_IRQ_ALDO0IN_REMOVAL , +AXP152_IRQ_DCDC1_V_LOW , +AXP152_IRQ_DCDC2_V_LOW , +AXP152_IRQ_DCDC3_V_LOW , +AXP152_IRQ_DCDC4_V_LOW , +AXP152_IRQ_PEK_SHORT , +AXP152_IRQ_PEK_LONG , +AXP152_IRQ_TIMER , +AXP152_IRQ_PEK_RIS_EDGE , +AXP152_IRQ_PEK_FAL_EDGE , +AXP152_IRQ_GPIO3_INPUT , +AXP152_IRQ_GPIO2_INPUT , +AXP152_IRQ_GPIO1_INPUT , +AXP152_IRQ_GPIO0_INPUT , +}; + +enum {AXP20X_IRQ_ACIN_OVER_V =1 ,AXP20X_IRQ_ACIN_PLUGIN ,AXP20X_IRQ_ACIN_REMOVAL ,
Signature · 4 lines
Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org ? Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
Lee Jones
AppliedPATCH v3 1/2 ARM: dts: Add binding documentation for AXP152 PMIC
In reply to Hans de GoedeQuoted 6 lines · Hans de Goede
Add devicetree binding documentation for the AXP152 PMIC, this is a stripped down version of the AXP202 PMIC with the battery charging function removed.
Signed-off-by Michal Suchanek <[email protected]>Signed-off-by Hans de Goede <[email protected]>
Quoted 8 lines
---
Changes in v2:
-New patch in v2 of this series
Changes in v3:
-Added Michal Suchanek's S-o-b (with his permission)--- Documentation/devicetree/bindings/mfd/axp20x.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
Applied, thanks.
Quoted 20 lines
Documentation/devicetree/bindings/mfd/axp20x.txt +3
-1@@ -1,12 +1,14 @@ AXP family PMIC device tree bindings The axp20x family current members : +axp152 (X-Powers) axp202 (X-Powers) axp209 (X-Powers) axp221 (X-Powers) Required properties: -- compatible: "x-powers,axp202", "x-powers,axp209", "x-powers,axp221" +- compatible: "x-powers,axp152", "x-powers,axp202", "x-powers,axp209", + "x-powers,axp221" - reg: The I2C slave address for the AXP chip - interrupt-parent: The parent interrupt controller - interrupts: SoC NMI / GPIO interrupt connected to the PMIC's IRQ pin
Signature · 4 lines
Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org ? Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog