mfd: AXP20x: Add support for AXP202 and AXP209
Subsystems (8)
v4 cover mfd: AXP20x: Add support for AXP202 and AXP209
AXP209 and AXP202 are the PMUs (Power Management Unit) used by A10, A13 and A20 SoCs and developed by X-Powers, a sister company of Allwinner. AXP20x comprises an adaptive USB-Compatible PWM charger, 2 BUCK DC-DC converters, 5 LDOs, multiple 12-bit ADCs of voltage, current and temperature as well as 4 configurable GPIOs.
This set of patches introduces the core driver and support for two different subsystems:
- Regulators
- PEK (Power Enable Key)
This patchset depends on patchsets:
irq: sun4i IRQ 0 / ENMI fixes (Hans de Goede)
ARM: sun7i/sun6i: irqchip: Irqchip driver for NMI controller (Carlo Caione)
regulator: helpers: Modify helpers enabling multi-bit control (Carlo Caione)
Changes since v1:
- Added a new standalone patch for defconfig
- MFD core:
* Removed axp,system-power-controller property
- Bindings documentation:
* Corrected description for dcdc-workmode property
* Removed unused axp20x-pek compatible
- Input misc PEK driver:
* Fixed seconds in lower case
- Regulators subsystem:
* Fixed axp20x_set_suspend_voltage()
* Switched to using multi-bit control for regulators
* When "regulators" node is not found driver doesn't quit
* Driver is now using devm_regulator_register()
* Added module_platform_driver() instead of subsys_initcall()
- DT:
* Added new DTSI for AXP209
* Added support for cubietruck and olinuxino-micro
Changes since v2:
- Added a new patch for multi_v7_defconfig to enable MFD core and subsystems
- DT:
* Dropped axp,system-power-controller property from DTS
* Moved compatible and interrupt-related properties from the DTSI file to the DTS board files
- Regulators subsystem:
* Deleted useless struct axp20x_regulators
* Added a warning when out of specs values are used for the dcdc frequency
- MFD core:
* Fixed coding style
* Removed IDs from device table for i2c
- Bindings documentation:
* Several corrections and fixes
Changes since v3:
- Removed x-powers-axp209.dtsi file
- Rewritten bindings document
- MFD core:
* Fixed casting
* Better comments / documentation
- Input misc PEK driver:
* Timings are now expressed in ms and the sysfs appies the closest possible value
* No more useless pretty-printing
* Removed devm_request_threaded_irq in favour of devm_request_any_context_irq
* Moved from input attributes to platform device attributes
- Regulators subsystem:
* Removed suspend mode (axp20x_set_suspend_voltage)
* Added regulators input supply
- DT
* DTs doesn't include anymore the dtsi
* Added input supplies for regulators
Carlo Caione (9):
mfd: AXP20x: Add mfd driver for AXP20x PMIC
dt-bindings: add vendor-prefix for X-Powers
mfd: AXP20x: Add bindings documentation
input: misc: Add driver for AXP20x Power Enable Key
input: misc: Add ABI docs for AXP20x PEK
regulator: AXP20x: Add support for regulators subsystem
ARM: sun7i/sun4i: dt: Add AXP209 support to various boards
ARM: sunxi: Add AXP20x support in defconfig
ARM: sunxi: Add AXP20x support multi_v7_defconfig
.../ABI/testing/sysfs-driver-input-axp-pek | 11 + Documentation/devicetree/bindings/mfd/axp20x.txt | 96 +++++++ .../devicetree/bindings/vendor-prefixes.txt | 1 + arch/arm/boot/dts/sun4i-a10-a1000.dts | 69 +++++ arch/arm/boot/dts/sun4i-a10-cubieboard.dts | 69 +++++ arch/arm/boot/dts/sun4i-a10-hackberry.dts | 75 ++++++ arch/arm/boot/dts/sun4i-a10-inet97fv2.dts | 69 +++++ arch/arm/boot/dts/sun4i-a10-mini-xplus.dts | 75 ++++++ arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts | 75 ++++++ arch/arm/boot/dts/sun4i-a10-pcduino.dts | 69 +++++ arch/arm/boot/dts/sun7i-a20-cubieboard2.dts | 70 +++++ arch/arm/boot/dts/sun7i-a20-cubietruck.dts | 70 +++++ arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts | 70 +++++ arch/arm/configs/multi_v7_defconfig | 3 + arch/arm/configs/sunxi_defconfig | 4 + drivers/input/misc/Kconfig | 11 + drivers/input/misc/Makefile | 1 + drivers/input/misc/axp20x-pek.c | 261 +++++++++++++++++++ drivers/mfd/Kconfig | 12 + drivers/mfd/Makefile | 1 + drivers/mfd/axp20x.c | 249 ++++++++++++++++++ drivers/regulator/Kconfig | 7 + drivers/regulator/Makefile | 1 + drivers/regulator/axp20x-regulator.c | 285 +++++++++++++++++++++ include/linux/mfd/axp20x.h | 180 +++++++++++++ 25 files changed, 1834 insertions(+) create mode 100644 Documentation/ABI/testing/sysfs-driver-input-axp-pek create mode 100644 Documentation/devicetree/bindings/mfd/axp20x.txt create mode 100644 drivers/input/misc/axp20x-pek.c create mode 100644 drivers/mfd/axp20x.c create mode 100644 drivers/regulator/axp20x-regulator.c create mode 100644 include/linux/mfd/axp20x.h
Signature · 1 line
1.8.3.2
PATCH v4 1/9 mfd: AXP20x: Add mfd driver for AXP20x PMIC
This patch introduces the preliminary support for PMICs X-Powers AXP202 and AXP209. The AXP209 and AXP202 are the PMUs (Power Management Unit) used by A10, A13 and A20 SoCs and developed by X-Powers, a sister company of Allwinner.
The core enables support for two subsystems:
- PEK (Power Enable Key)
- Regulators
--- drivers/mfd/Kconfig | 12 +++ drivers/mfd/Makefile | 1 + drivers/mfd/axp20x.c | 249 +++++++++++++++++++++++++++++++++++++++++++++ include/linux/mfd/axp20x.h | 180 ++++++++++++++++++++++++++++++++ 4 files changed, 442 insertions(+) create mode 100644 drivers/mfd/axp20x.c create mode 100644 include/linux/mfd/axp20x.h
drivers/mfd/Kconfig +12 -0
@@ -59,6 +59,18 @@ config MFD_AAT2870_CORE additional drivers must be enabled in order to use the functionality of the device. +config MFD_AXP20X + bool "X-Powers AXP20X" + select MFD_CORE + select REGMAP_I2C + select REGMAP_IRQ + depends on I2C=y + help + If you say Y here you get support for the X-Powers AXP202 and AXP209. + This driver include only the core APIs. You have to select individual + components like regulators or the PEK (Power Enable Key) under the + corresponding menus. + config MFD_CROS_EC tristate "ChromeOS Embedded Controller" select MFD_CORE
drivers/mfd/Makefile +1 -0
@@ -101,6 +101,7 @@ obj-$(CONFIG_PMIC_DA9052) += da9052-irq.o obj-$(CONFIG_PMIC_DA9052) += da9052-core.o obj-$(CONFIG_MFD_DA9052_SPI) += da9052-spi.o obj-$(CONFIG_MFD_DA9052_I2C) += da9052-i2c.o +obj-$(CONFIG_MFD_AXP20X) += axp20x.o obj-$(CONFIG_MFD_LP3943) += lp3943.o obj-$(CONFIG_MFD_LP8788) += lp8788.o lp8788-irq.o
drivers/mfd/axp20x.c new file +249 -0
249 lines not on this page · raw message
include/linux/mfd/axp20x.h new file +180 -0
180 lines not on this page · raw message
Signature · 1 line
1.8.3.2
PATCH v4 1/9 mfd: AXP20x: Add mfd driver for AXP20x PMIC
Quoted 8 lines · On Friday 11 April 2014 11:38:05 Carlo Caione wrote:
drivers/mfd/axp20x.c new file +8
-0+#define AXP20X_IRQ (_irq, _off, _mask) \ + [AXP20X_IRQ_##_irq] = { .reg_offset = (_off), .mask = BIT(_mask) } + +static const struct regmap_irq axp20x_regmap_irqs[] = { +AXP20X_IRQ (ACIN_OVER_V ,0 ,7 ), +AXP20X_IRQ (ACIN_PLUGIN ,0 ,6 ), +AXP20X_IRQ (ACIN_REMOVAL ,0 ,5 ), +AXP20X_IRQ (VBUS_OVER_V ,0 ,4 ),
drivers/mfd/axp20x.c line 90
Quoted 10 lines
drivers/mfd/axp20x.c new file +10
-0+AXP20X_IRQ (VBUS_PLUGIN ,0 ,3 ), +AXP20X_IRQ (VBUS_REMOVAL ,0 ,2 ), +AXP20X_IRQ (VBUS_V_LOW ,0 ,1 ), +AXP20X_IRQ (BATT_PLUGIN ,1 ,7 ), +AXP20X_IRQ (BATT_REMOVAL ,1 ,6 ), +AXP20X_IRQ (BATT_ENT_ACT_MODE ,1 ,5 ), +AXP20X_IRQ (BATT_EXIT_ACT_MODE ,1 ,4 ), +AXP20X_IRQ (CHARG ,1 ,3 ), +AXP20X_IRQ (CHARG_DONE ,1 ,2 ), + AXP20X_IRQ(BATT_TEMP_HIGH, 1, 1),
Why do you have to enumerate the interrupts here? Can't you just put all the numbers into the DT nodes of the devices using them?
In general, I would say that the mfd driver should not care about what is connected to it.
Arnd
[linux-sunxi] Re: [PATCH v4 1/9] mfd: AXP20x: Add mfd driver for AXP20x PMIC
Quoted 23 lines · Arnd Bergmann
Quoted 8 lines · On Friday 11 April 2014 11:38:05 Carlo Caione wrote:
drivers/mfd/axp20x.c new file +8
-0+#define AXP20X_IRQ (_irq, _off, _mask) \ + [AXP20X_IRQ_##_irq] = { .reg_offset = (_off), .mask = BIT(_mask) } + +static const struct regmap_irq axp20x_regmap_irqs[] = { +AXP20X_IRQ (ACIN_OVER_V ,0 ,7 ), +AXP20X_IRQ (ACIN_PLUGIN ,0 ,6 ), +AXP20X_IRQ (ACIN_REMOVAL ,0 ,5 ), +AXP20X_IRQ (VBUS_OVER_V ,0 ,4 ),drivers/mfd/axp20x.c line 90
Quoted 10 lines
drivers/mfd/axp20x.c new file +10
-0+AXP20X_IRQ (VBUS_PLUGIN ,0 ,3 ), +AXP20X_IRQ (VBUS_REMOVAL ,0 ,2 ), +AXP20X_IRQ (VBUS_V_LOW ,0 ,1 ), +AXP20X_IRQ (BATT_PLUGIN ,1 ,7 ), +AXP20X_IRQ (BATT_REMOVAL ,1 ,6 ), +AXP20X_IRQ (BATT_ENT_ACT_MODE ,1 ,5 ), +AXP20X_IRQ (BATT_EXIT_ACT_MODE ,1 ,4 ), +AXP20X_IRQ (CHARG ,1 ,3 ), +AXP20X_IRQ (CHARG_DONE ,1 ,2 ), + AXP20X_IRQ(BATT_TEMP_HIGH, 1, 1),Why do you have to enumerate the interrupts here? Can't you just put all the numbers into the DT nodes of the devices using them?
Quoted 2 lines
In general, I would say that the mfd driver should not care about what is connected to it.
I need this for the regmap irq chip (to be used in regmap_add_irq_chip()). I'm not sure if you are suggesting to get rid of the irq chip.
br,
Signature · 1 line
Carlo Caione
Mark Brown
maintainerPATCH v4 1/9 mfd: AXP20x: Add mfd driver for AXP20x PMIC
In reply to Arnd BergmannQuoted 5 lines · Arnd Bergmann
Why do you have to enumerate the interrupts here? Can't you just put all the numbers into the DT nodes of the devices using them?
In general, I would say that the mfd driver should not care about what is connected to it.
This then means that all the machines using the device need to define the interrupt table and have the MFD cells represented in the DT which means encoding Linux abstractions into the DT.
In cases where the device is also used with ACPI or platform data that's a definite issue since they have different idioms. That applies less to PMICs tightly bound to particular SoCs but is an issue in general, not all the world is DT.
There's also issues here with us changing our subsystems. Things like
clocks are a bit indistinct at present, they're sort of floating between
clock and other subsystems. We've also done things like invent extcon,
making completely new subdevices. Keeping the data out of DT avoids
problems when this happens. The balance changes a bit if there are
clearly reusable IPs within the device but sadly hardware designers
don't always give us that and even then sometimes we don't want to use
them like that.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140411/a6e837c1/attachment.sig>
PATCH v4 1/9 mfd: AXP20x: Add mfd driver for AXP20x PMIC
Quoted 17 lines · On Friday 11 April 2014 13:09:08 Mark Brown wrote:
Quoted 5 lines · Arnd Bergmann
Why do you have to enumerate the interrupts here? Can't you just put all the numbers into the DT nodes of the devices using them?
In general, I would say that the mfd driver should not care about what is connected to it.
This then means that all the machines using the device need to define the interrupt table and have the MFD cells represented in the DT which means encoding Linux abstractions into the DT.
In cases where the device is also used with ACPI or platform data that's a definite issue since they have different idioms. That applies less to PMICs tightly bound to particular SoCs but is an issue in general, not all the world is DT.
Quoted 8 lines
There's also issues here with us changing our subsystems. Things like clocks are a bit indistinct at present, they're sort of floating between clock and other subsystems. We've also done things like invent extcon, making completely new subdevices. Keeping the data out of DT avoids problems when this happens. The balance changes a bit if there are clearly reusable IPs within the device but sadly hardware designers don't always give us that and even then sometimes we don't want to use them like that.
Ok, fair enough.
Arnd
PATCH v4 1/9 mfd: AXP20x: Add mfd driver for AXP20x PMIC
In reply to Carlo CaioneQuoted 10 lines
This patch introduces the preliminary support for PMICs X-Powers AXP202 and AXP209. The AXP209 and AXP202 are the PMUs (Power Management Unit) used by A10, A13 and A20 SoCs and developed by X-Powers, a sister company of Allwinner.
The core enables support for two subsystems:
- PEK (Power Enable Key)
- RegulatorsSigned-off-by Carlo Caione <[email protected]>
Quoted 8 lines
--- drivers/mfd/Kconfig | 12 +++ drivers/mfd/Makefile | 1 + drivers/mfd/axp20x.c | 249 +++++++++++++++++++++++++++++++++++++++++++++ include/linux/mfd/axp20x.h | 180 ++++++++++++++++++++++++++++++++ 4 files changed, 442 insertions(+) create mode 100644 drivers/mfd/axp20x.c create mode 100644 include/linux/mfd/axp20x.h
This looks good to me know.
Once you have all the other Acks you need I'd be happy to create an immutable branch for the other maintainers to pull from.
Signature · 4 lines
Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org ? Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
PATCH v4 1/9 mfd: AXP20x: Add mfd driver for AXP20x PMIC
Quoted 19 lines
Quoted 10 lines
This patch introduces the preliminary support for PMICs X-Powers AXP202 and AXP209. The AXP209 and AXP202 are the PMUs (Power Management Unit) used by A10, A13 and A20 SoCs and developed by X-Powers, a sister company of Allwinner.
The core enables support for two subsystems:
- PEK (Power Enable Key)
- RegulatorsSigned-off-by Carlo Caione <[email protected]>Quoted 8 lines
--- drivers/mfd/Kconfig | 12 +++ drivers/mfd/Makefile | 1 + drivers/mfd/axp20x.c | 249 +++++++++++++++++++++++++++++++++++++++++++++ include/linux/mfd/axp20x.h | 180 ++++++++++++++++++++++++++++++++ 4 files changed, 442 insertions(+) create mode 100644 drivers/mfd/axp20x.c create mode 100644 include/linux/mfd/axp20x.h
Quoted 4 lines
This looks good to me know.
Once you have all the other Acks you need I'd be happy to create an immutable branch for the other maintainers to pull from.
Whoops, forgot this:
Signature · 4 lines
Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org ? Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
PATCH v4 2/9 dt-bindings: add vendor-prefix for X-Powers
In reply to Carlo Caione--- Documentation/devicetree/bindings/vendor-prefixes.txt | 1 + 1 file changed, 1 insertion(+)
Documentation/devicetree/bindings/vendor-prefixes.txt +1 -0
@@ -95,3 +95,4 @@ winbond Winbond Electronics corp. wlf Wolfson Microelectronics wm Wondermedia Technologies, Inc. xlnx Xilinx +x-powers X-Powers
Signature · 1 line
1.8.3.2
PATCH v4 3/9 mfd: AXP20x: Add bindings documentation
In reply to Carlo CaioneBindings documentation for the AXP20x driver. In this file also sub-nodes are documented.
--- Documentation/devicetree/bindings/mfd/axp20x.txt | 96 ++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 Documentation/devicetree/bindings/mfd/axp20x.txt
Documentation/devicetree/bindings/mfd/axp20x.txt new file +96 -0
@@ -0,0 +1,96 @@ +AXP202/AXP209 device tree bindings + +The axp20x family current members :- +axp202 (X-Powers) +axp209 (X-Powers) + +Required properties: +- compatible: "x-powers,axp202" or "x-powers,axp209" +- reg: The I2C slave address for the AXP chip +- interrupt-parent: The parent interrupt controller +- interrupts: Interrupt specifiers for interrupt sources +- interrupt-controller: axp20x has its own internal IRQs +- #interrupt-cells: Should be set to 1 +- acin-supply: The input supply for LDO1 +- vin2-supply: The input supply for DCDC2 +- vin3-supply: The input supply for DCDC3 +- ldo24in-supply: The input supply for LDO2, LDO4 +- ldo3in-supply: The input supply for LDO3 +- ldo5in-supply: The input supply for LDO5 + +- regulators: A node that houses a sub-node for each regulator. The regulators are + bound using their name as listed here: dcdc2, dcdc3, ldo1, ldo2, + ldo3, ldo4, ldo5. The bindings details of individual regulator + device can be found in: + Documentation/devicetree/bindings/regulator/regulator.txt with + the exception of x-powers,dcdc-freq +- compatible (for regulators): "x-powers,axp20x-reg" +- x-powers,dcdc-freq: defines the work frequency of DC-DC in KHz + (range: 750-1875). Default: 1.5MHz + +Optional properties for DCDCs: +- x-powers,dcdc-workmode: 1 for PWM mode, 0 for AUTO mode + Default: AUTO mode + +Example: + +axp209: pmic at 34 { + compatible = "x-powers,axp209"; + reg = <0x34>; + interrupt-parent = <&nmi_intc>; + interrupts = <0 8>; + + interrupt-controller; + #interrupt-cells = <1>; + + acin-supply = <&axp_ipsout_reg>; + vin2-supply = <&axp_ipsout_reg>; + vin3-supply = <&axp_ipsout_reg>; + ldo24in-supply = <&axp_ipsout_reg>; + ldo3in-supply = <&axp_ipsout_reg>; + ldo5in-supply = <&axp_ipsout_reg>; + + regulators { + compatible = "x-powers,axp20x-reg"; + + x-powers,dcdc-freq = <1500>; + + axp_vcore_reg: dcdc2 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <2275000>; + regulator-always-on; + }; + + axp_ddr_reg: dcdc3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + regulator-always-on; + }; + + axp_rtc_reg: ldo1 { + regulator-always-on; + }; + + axp_analog_reg: ldo2 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + axp_pll_reg: ldo3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + }; + + axp_hdmi_reg: ldo4 { + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <3300000>; + }; + + axp_mic_reg: ldo5 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + }; +}; +
Signature · 1 line
1.8.3.2
PATCH v4 4/9 input: misc: Add driver for AXP20x Power Enable Key
In reply to Carlo CaioneThis patch add support for the Power Enable Key found on MFD AXP202 and AXP209. Besides the basic support for the button, the driver adds two entries in sysfs to configure the time delay for power on/off.
--- drivers/input/misc/Kconfig | 11 ++ drivers/input/misc/Makefile | 1 + drivers/input/misc/axp20x-pek.c | 261 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 273 insertions(+) create mode 100644 drivers/input/misc/axp20x-pek.c
drivers/input/misc/Kconfig +11 -0
@@ -393,6 +393,17 @@ config INPUT_RETU_PWRBUTTON To compile this driver as a module, choose M here. The module will be called retu-pwrbutton. +config INPUT_AXP20X_PEK + tristate "X-Powers AXP20X power button driver" + depends on MFD_AXP20X + help + Say Y here if you want to enable power key reporting via the + AXP20X PMIC. + + To compile this driver as a module, choose M here. The module will + be called axp20x-pek. + + config INPUT_TWL4030_PWRBUTTON tristate "TWL4030 Power button Driver" depends on TWL4030_CORE
drivers/input/misc/Makefile +1 -0
@@ -50,6 +50,7 @@ obj-$(CONFIG_INPUT_POWERMATE) += powermate.o obj-$(CONFIG_INPUT_PWM_BEEPER) += pwm-beeper.o obj-$(CONFIG_INPUT_RB532_BUTTON) += rb532_button.o obj-$(CONFIG_INPUT_RETU_PWRBUTTON) += retu-pwrbutton.o +obj-$(CONFIG_INPUT_AXP20X_PEK) += axp20x-pek.o obj-$(CONFIG_INPUT_GPIO_ROTARY_ENCODER) += rotary_encoder.o obj-$(CONFIG_INPUT_SGI_BTNS) += sgi_btns.o obj-$(CONFIG_INPUT_SIRFSOC_ONKEY) += sirfsoc-onkey.o
drivers/input/misc/axp20x-pek.c new file +261 -0
261 lines not on this page · raw message
Signature · 1 line
1.8.3.2
Dmitry Torokhov
maintainerPATCH v4 4/9 input: misc: Add driver for AXP20x Power Enable Key
Quoted 138 lines · Carlo Caione
This patch add support for the Power Enable Key found on MFD AXP202 and AXP209. Besides the basic support for the button, the driver adds two entries in sysfs to configure the time delay for power on/off.
Signed-off-by Carlo Caione <[email protected]>--- drivers/input/misc/Kconfig | 11 ++ drivers/input/misc/Makefile | 1 + drivers/input/misc/axp20x-pek.c | 261 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 273 insertions(+) create mode 100644 drivers/input/misc/axp20x-pek.cdrivers/input/misc/Kconfig +11
-0@@ -393,6 +393,17 @@ config INPUT_RETU_PWRBUTTON To compile this driver as a module, choose M here. The module will be called retu-pwrbutton. +config INPUT_AXP20X_PEK + tristate "X-Powers AXP20X power button driver" + depends on MFD_AXP20X + help + Say Y here if you want to enable power key reporting via the + AXP20X PMIC. + + To compile this driver as a module, choose M here. The module will + be called axp20x-pek. + + config INPUT_TWL4030_PWRBUTTON tristate "TWL4030 Power button Driver" depends on TWL4030_COREdrivers/input/misc/Makefile +1
-0@@ -50,6 +50,7 @@ obj-$(CONFIG_INPUT_POWERMATE) += powermate.o obj-$(CONFIG_INPUT_PWM_BEEPER) += pwm-beeper.o obj-$(CONFIG_INPUT_RB532_BUTTON) += rb532_button.o obj-$(CONFIG_INPUT_RETU_PWRBUTTON) += retu-pwrbutton.o +obj-$(CONFIG_INPUT_AXP20X_PEK) += axp20x-pek.o obj-$(CONFIG_INPUT_GPIO_ROTARY_ENCODER) += rotary_encoder.o obj-$(CONFIG_INPUT_SGI_BTNS) += sgi_btns.o obj-$(CONFIG_INPUT_SIRFSOC_ONKEY) += sirfsoc-onkey.odrivers/input/misc/axp20x-pek.c new file +86
-0@@ -0,0 +1,261 @@ +/* +* axp20x power button driver. +* +* Copyright (C) 2013 Carlo Caione <[email protected]> +* +* This file is subject to the terms and conditions of the GNU General +* Public License. See the file "COPYING" in the main directory of this +* archive for more details. +* +* 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. +*/ + +#include <linux/errno.h> +#include <linux/irq.h> +#include <linux/init.h> +#include <linux/input.h> +#include <linux/interrupt.h> +#include <linux/kernel.h> +#include <linux/mfd/axp20x.h> +#include <linux/module.h> +#include <linux/platform_device.h> +#include <linux/regmap.h> +#include <linux/slab.h> + +#define AXP20X_PEK_STARTUP_MASK (0xc0) +#define AXP20X_PEK_SHUTDOWN_MASK (0x03) + +struct axp20x_pek { +struct axp20x_dev *axp20x; +struct input_dev *input; +int irq_dbr; +int irq_dbf; +}; + +struct axp20x_time { +unsigned int time; +unsigned int idx; +}; + +static const struct axp20x_time startup_time[] = { + { .time =128 , .idx =0 }, + { .time =1000 , .idx =2 }, + { .time =3000 , .idx =1 }, + { .time =2000 , .idx =3 }, +}; + +static const struct axp20x_time shutdown_time[] = { + { .time =4000 , .idx =0 }, + { .time =6000 , .idx =1 }, + { .time =8000 , .idx =2 }, + { .time =10000 , .idx =3 }, +}; + +struct axp20x_pek_ext_attr { +const struct axp20x_time *p_time; +unsigned int mask; +}; + +static struct axp20x_pek_ext_attr axp20x_pek_startup_ext_attr = { + .p_time = startup_time, + .mask =AXP20X_PEK_STARTUP_MASK , +}; + +static struct axp20x_pek_ext_attr axp20x_pek_shutdown_ext_attr = { + .p_time = shutdown_time, + .mask =AXP20X_PEK_SHUTDOWN_MASK , +}; + +static struct axp20x_pek_ext_attr *get_axp_ext_attr (struct device_attribute *attr) +{ + return container_of(attr, struct dev_ext_attribute, attr)->var; +} + +static ssize_t axp20x_show_ext_attr (struct device *dev,struct device_attribute *attr, +char *buf) +{ +struct axp20x_pek *axp20x_pek =dev_get_drvdata (dev); +struct axp20x_pek_ext_attr *axp20x_ea =get_axp_ext_attr (attr); +unsigned int val; +int ret, i; + + ret =regmap_read (axp20x_pek->axp20x->regmap,AXP20X_PEK_KEY , &val); +if (ret !=0 )
drivers/input/misc/axp20x-pek.c line 96
Quoted 10 lines
drivers/input/misc/axp20x-pek.c new file +10
-0+return ret; + + val &= axp20x_ea->mask; + val >>=ffs (axp20x_ea->mask) -1 ; + +for (i =0 ; i <4 ; i++) +if (val == axp20x_ea->p_time[i].idx) + val = axp20x_ea->p_time[i].time; + +return sprintf (buf,"%ums\n" , val);
Please do not print ums and instead document the units in sysfs ABI docs.
Quoted 131 lines
drivers/input/misc/axp20x-pek.c new file +131
-0+} + +static ssize_t axp20x_store_ext_attr (struct device *dev,struct device_attribute *attr, +const char *buf,size_t count) +{ +struct axp20x_pek *axp20x_pek =dev_get_drvdata (dev); +struct axp20x_pek_ext_attr *axp20x_ea =get_axp_ext_attr (attr); +char val_str[20 ]; +size_t len; +int ret, i; +unsigned int val, idx =0 ; +unsigned int best_err =UINT_MAX ; + + val_str[sizeof (val_str) -1 ] ='\0' ; +strncpy (val_str, buf,sizeof (val_str) -1 ); + len =strlen (val_str); + +if (len && val_str[len -1 ] =='\n' ) + val_str[len -1 ] ='\0' ; + + ret =kstrtouint (val_str,10 , &val); +if (ret) +return ret; + +for (i =3 ; i >=0 ; i--) { +unsigned int err; + + err =abs (axp20x_ea->p_time[i].time - val); +if (err < best_err) { + best_err = err; + idx = axp20x_ea->p_time[i].idx; + } + +if (!err) +break ; + } + + idx <<=ffs (axp20x_ea->mask) -1 ; + ret =regmap_update_bits (axp20x_pek->axp20x->regmap, +AXP20X_PEK_KEY , + axp20x_ea->mask, idx); +if (ret !=0 ) +return -EINVAL ; +return count; +} + +static struct dev_ext_attribute axp20x_dev_attr_startup = { + .attr =__ATTR (startup,0644 , axp20x_show_ext_attr, axp20x_store_ext_attr), + .var = &axp20x_pek_startup_ext_attr +}; + +static struct dev_ext_attribute axp20x_dev_attr_shutdown = { + .attr =__ATTR (shutdown,0644 , axp20x_show_ext_attr, axp20x_store_ext_attr), + .var = &axp20x_pek_shutdown_ext_attr +}; + +static irqreturn_t axp20x_pek_irq (int irq,void *pwr) +{ +struct input_dev *idev = pwr; +struct axp20x_pek *axp20x_pek =input_get_drvdata (idev); + +if (irq == axp20x_pek->irq_dbr) +input_report_key (idev,KEY_POWER , true); +else if (irq == axp20x_pek->irq_dbf) +input_report_key (idev,KEY_POWER , false); + +input_sync (idev); + +return IRQ_HANDLED ; +} + +static int axp20x_pek_probe (struct platform_device *pdev) +{ +struct axp20x_pek *axp20x_pek; +struct axp20x_dev *axp20x; +struct input_dev *idev; +int error; + + axp20x_pek =devm_kzalloc (&pdev->dev,sizeof (struct axp20x_pek ), +GFP_KERNEL ); +if (!axp20x_pek) +return -ENOMEM ; + + axp20x_pek->axp20x =dev_get_drvdata (pdev->dev.parent); + axp20x = axp20x_pek->axp20x; + + axp20x_pek->irq_dbr =platform_get_irq_byname (pdev,"PEK_DBR" ); +if (axp20x_pek->irq_dbr <0 ) { +dev_err (&pdev->dev,"No IRQ for PEK_DBR, error=%d\n" , + axp20x_pek->irq_dbr); +return axp20x_pek->irq_dbr; + } + axp20x_pek->irq_dbr =regmap_irq_get_virq (axp20x->regmap_irqc, + axp20x_pek->irq_dbr); + + axp20x_pek->irq_dbf =platform_get_irq_byname (pdev,"PEK_DBF" ); +if (axp20x_pek->irq_dbf <0 ) { +dev_err (&pdev->dev,"No IRQ for PEK_DBF, error=%d\n" , + axp20x_pek->irq_dbf); +return axp20x_pek->irq_dbf; + } + axp20x_pek->irq_dbf =regmap_irq_get_virq (axp20x->regmap_irqc, + axp20x_pek->irq_dbf); + + axp20x_pek->input =devm_input_allocate_device (&pdev->dev); +if (!axp20x_pek->input) +return -ENOMEM ; + + idev = axp20x_pek->input; + + idev->name ="axp20x-pek" ; + idev->phys ="m1kbd/input2" ; + idev->dev.parent = &pdev->dev; + +input_set_capability (idev,EV_KEY ,KEY_POWER ); + +input_set_drvdata (idev, axp20x_pek); + + error =devm_request_any_context_irq (&pdev->dev, axp20x_pek->irq_dbr, + axp20x_pek_irq,0 , +"axp20x-pek-dbr" , idev); +if (error <0 ) { +dev_err (axp20x->dev,"Failed to request dbr IRQ#%d: %d\n" , + axp20x_pek->irq_dbr, error); + +return error; + } + + error =devm_request_any_context_irq (&pdev->dev, axp20x_pek->irq_dbf, + axp20x_pek_irq,0 , +"axp20x-pek-dbf" , idev);
drivers/input/misc/axp20x-pek.c line 237
Quoted 10 lines
drivers/input/misc/axp20x-pek.c new file +10
-0+if (error <0 ) { +dev_err (axp20x->dev,"Failed to request dbf IRQ#%d: %d\n" , + axp20x_pek->irq_dbf, error); +return error; + } + + +if (device_create_file (&pdev->dev, &axp20x_dev_attr_startup.attr) || +device_create_file (&pdev->dev, &axp20x_dev_attr_shutdown.attr)) +return -ENODEV ;
I think you still want to use attribute group here. You also need to clean up the attributes when unbinding device. Also, why returning -ENODEV instead of the proper error code?
Quoted 27 lines
drivers/input/misc/axp20x-pek.c new file +24
-0+ + error =input_register_device (idev); +if (error) { +dev_err (axp20x->dev,"Can't register input device: %d\n" , error); +return error; + } + +platform_set_drvdata (pdev, axp20x_pek); + +return 0 ; +} + +static struct platform_driver axp20x_pek_driver = { + .probe = axp20x_pek_probe, + .driver = { + .name ="axp20x-pek" , + .owner =THIS_MODULE , + }, +}; +module_platform_driver (axp20x_pek_driver); + +MODULE_DESCRIPTION ("axp20x Power Button" ); +MODULE_AUTHOR ("Carlo Caione <[email protected]>" ); +MODULE_LICENSE ("GPL" );Signature · 1 line
1.8.3.2
Thanks.
Signature · 1 line
Dmitry
[linux-sunxi] Re: [PATCH v4 4/9] input: misc: Add driver for AXP20x Power Enable Key
On Sun, Apr 13, 2014 at 10:17 AM, Dmitry Torokhov
<[email protected]> wrote:
<cut>
Quoted 15 lines
Quoted 15 lines
drivers/input/misc/axp20x-pek.c new file +15
-0+static ssize_t axp20x_show_ext_attr (struct device *dev,struct device_attribute *attr, +char *buf) +{ +struct axp20x_pek *axp20x_pek =dev_get_drvdata (dev); +struct axp20x_pek_ext_attr *axp20x_ea =get_axp_ext_attr (attr); +unsigned int val; +int ret, i; + + ret =regmap_read (axp20x_pek->axp20x->regmap,AXP20X_PEK_KEY , &val); +if (ret !=0 ) +return ret; + + val &= axp20x_ea->mask; + val >>=ffs (axp20x_ea->mask) -1 ; +
Quoted 8 lines
drivers/input/misc/axp20x-pek.c line 96
Quoted 5 lines
drivers/input/misc/axp20x-pek.c new file +5
-0+for (i =0 ; i <4 ; i++) +if (val == axp20x_ea->p_time[i].idx) + val = axp20x_ea->p_time[i].time; + +return sprintf (buf,"%ums\n" , val);Please do not print ums and instead document the units in sysfs ABI docs.
Ok, I'll fix it.
<cut>
Quoted 7 lines
drivers/input/misc/axp20x-pek.c line 237
Quoted 3 lines
drivers/input/misc/axp20x-pek.c new file +3
-0+if (device_create_file (&pdev->dev, &axp20x_dev_attr_startup.attr) || +device_create_file (&pdev->dev, &axp20x_dev_attr_shutdown.attr)) +return -ENODEV ;I think you still want to use attribute group here. You also need to clean up the attributes when unbinding device. Also, why returning
-ENODEVinstead of the proper error code?
I'll fix the error code and I'll add the clean up code. I'm still a bit puzzled about the attribute group for the platform devices. IIRC for the platform devices the default attribute group is still a bit an issue [1]
[1] http://www.spinics.net/lists/hotplug/msg05775.html
Thanks for the review,
Signature · 1 line
Carlo Caione
PATCH v4 5/9 input: misc: Add ABI docs for AXP20x PEK
In reply to Carlo CaioneAdd ABI entries for the PEK found on PMU X-Powers AXP202 and AXP209.
--- Documentation/ABI/testing/sysfs-driver-input-axp-pek | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Documentation/ABI/testing/sysfs-driver-input-axp-pek
Documentation/ABI/testing/sysfs-driver-input-axp-pek new file +11 -0
@@ -0,0 +1,11 @@ +What: /sys/class/input/input(x)/startup +Date: March 2014 +Contact: Carlo Caione <[email protected]> +Description: Startup time. Board is powered on if the button is pressed + for more than <startup_time> + +What: /sys/class/input/input(x)/shutdown +Date: March 2014 +Contact: Carlo Caione <[email protected]> +Description: Shutdown time. Board is powered off if the button is pressed + for more than <shutdown_time>
Signature · 1 line
1.8.3.2
PATCH v4 6/9 regulator: AXP20x: Add support for regulators subsystem
In reply to Carlo CaioneAXP202 and AXP209 come with two synchronous step-down DC-DCs and five LDOs. This patch introduces basic support for those regulators.
--- drivers/regulator/Kconfig | 7 + drivers/regulator/Makefile | 1 + drivers/regulator/axp20x-regulator.c | 285 +++++++++++++++++++++++++++++++++++ 3 files changed, 293 insertions(+) create mode 100644 drivers/regulator/axp20x-regulator.c
drivers/regulator/Kconfig +7 -0
@@ -139,6 +139,13 @@ config REGULATOR_AS3722 AS3722 PMIC. This will enable support for all the software controllable DCDC/LDO regulators. +config REGULATOR_AXP20X + tristate "X-POWERS AXP20X PMIC Regulators" + depends on MFD_AXP20X + help + This driver provides support for the voltage regulators on the + AXP20X PMIC. + config REGULATOR_DA903X tristate "Dialog Semiconductor DA9030/DA9034 regulators" depends on PMIC_DA903X
drivers/regulator/Makefile +1 -0
@@ -20,6 +20,7 @@ obj-$(CONFIG_REGULATOR_ANATOP) += anatop-regulator.o obj-$(CONFIG_REGULATOR_ARIZONA) += arizona-micsupp.o arizona-ldo1.o obj-$(CONFIG_REGULATOR_AS3711) += as3711-regulator.o obj-$(CONFIG_REGULATOR_AS3722) += as3722-regulator.o +obj-$(CONFIG_REGULATOR_AXP20X) += axp20x-regulator.o obj-$(CONFIG_REGULATOR_DA903X) += da903x.o obj-$(CONFIG_REGULATOR_DA9052) += da9052-regulator.o obj-$(CONFIG_REGULATOR_DA9055) += da9055-regulator.o
drivers/regulator/axp20x-regulator.c new file +285 -0
285 lines not on this page · raw message
Signature · 1 line
1.8.3.2
Mark Brown
maintainerPATCH v4 6/9 regulator: AXP20x: Add support for regulators subsystem
Quoted 2 lines · Carlo Caione
AXP202 and AXP209 come with two synchronous step-down DC-DCs and five LDOs. This patch introduces basic support for those regulators.
Applied, thanks, but I had to resolve some trivial add/add conflicts
with the Broadcom regulator driver Makefile and Kconfig additions -
please remember to submit patches against current code.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140411/638e3f2c/attachment.sig>
[linux-sunxi] Re: [PATCH v4 6/9] regulator: AXP20x: Add support for regulators subsystem
Quoted 7 lines · Mark Brown
Quoted 2 lines · Carlo Caione
AXP202 and AXP209 come with two synchronous step-down DC-DCs and five LDOs. This patch introduces basic support for those regulators.
Applied, thanks, but I had to resolve some trivial add/add conflicts with the Broadcom regulator driver
MakefileandKconfigadditions - please remember to submit patches against current code.
Sorry, I'll do next time.
Thank you,
Signature · 1 line
Carlo Caione
PATCH v4 6/9 regulator: AXP20x: Add support for regulators subsystem
In reply to Carlo CaioneHello Carlo,
Quoted 7 lines · Carlo Caione
AXP202 and AXP209 come with two synchronous step-down DC-DCs and five LDOs. This patch introduces basic support for those regulators.
Signed-off-by Carlo Caione <[email protected]>--- drivers/regulator/Kconfig | 7 + drivers/regulator/Makefile | 1 +
[...]
drivers/regulator/axp20x-regulator.c line 191
Quoted 4 lines
drivers/regulator/axp20x-regulator.c new file +4
-0+if (!np) +return 0 ; + + regulators =of_find_node_by_name (np,"regulators" );
I know I'm late, and this patch has already been applied, but shouldn't we use of_get_child_by_name instead of of_find_node_by_name. This might lead to wrong regulators node parsing if other regulators are defined in the DT after the axp20x node, because, AFAIK, this function searches for DT nodes defined after the specified np node, but not necessarely children of the np node.
Best Regards,
Boris
Signature · 3 lines
Boris Brezillon, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com
Mark Brown
maintainerPATCH v4 6/9 regulator: AXP20x: Add support for regulators subsystem
Quoted 6 lines · Boris BREZILLON
I know I'm late, and this patch has already been applied, but shouldn't we use
of_get_child_by_nameinstead ofof_find_node_by_name. This might lead to wrong regulators node parsing if other regulators are defined in the DT after the axp20x node, because, AFAIK, this function searches for DT nodes defined after the specified np node, but not necessarely children of the np node.
Yes.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140515/4c782607/attachment.sig>
[linux-sunxi] Re: [PATCH v4 6/9] regulator: AXP20x: Add support for regulators subsystem
In reply to Boris BREZILLONQuoted 16 lines · Boris BREZILLON
Hello Carlo,
Quoted 7 lines · Carlo Caione
AXP202 and AXP209 come with two synchronous step-down DC-DCs and five LDOs. This patch introduces basic support for those regulators.
Signed-off-by Carlo Caione <[email protected]>--- drivers/regulator/Kconfig | 7 + drivers/regulator/Makefile | 1 +[...]
drivers/regulator/axp20x-regulator.c line 191
Quoted 4 lines
drivers/regulator/axp20x-regulator.c new file +4
-0+if (!np) +return 0 ; + + regulators =of_find_node_by_name (np,"regulators" );
Quoted 6 lines
I know I'm late, and this patch has already been applied, but shouldn't we use
of_get_child_by_nameinstead ofof_find_node_by_name. This might lead to wrong regulators node parsing if other regulators are defined in the DT after the axp20x node, because, AFAIK, this function searches for DT nodes defined after the specified np node, but not necessarely children of the np node.
Right. I'll prepare a fix. Feel free to submit a patch if you want.
Thank you,
Signature · 1 line
Carlo Caione
PATCH v4 7/9 ARM: sun7i/sun4i: dt: Add AXP209 support to various boards
In reply to Carlo Caione---
In all the DTs the min and max microvolt allowed for each regulator are actually the min and max voltage possible for the regulator itself. This is not safe but we do not have the ranges allowed for each board and the original Allwinner driver does exactly this way.
AXP20x has the so called Power Path Management (IPS) that can select the proper power supply according to the status of the external power and the Li-battery status. The output of the IPS block is usually a 5V fixed voltage used as input supply for all the other regulators. This fixed voltage is represented in the DT as a fixed voltage regulator in the "regulator" subnode.
arch/arm/boot/dts/sun4i-a10-a1000.dts | 69 +++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-cubieboard.dts | 69 +++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-hackberry.dts | 75 +++++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-inet97fv2.dts | 69 +++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-mini-xplus.dts | 75 +++++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts | 75 +++++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-pcduino.dts | 69 +++++++++++++++++++++++ arch/arm/boot/dts/sun7i-a20-cubieboard2.dts | 70 +++++++++++++++++++++++ arch/arm/boot/dts/sun7i-a20-cubietruck.dts | 70 +++++++++++++++++++++++ arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts | 70 +++++++++++++++++++++++ 10 files changed, 711 insertions(+)
arch/arm/boot/dts/sun4i-a10-a1000.dts +69 -0
@@ -88,6 +88,75 @@ pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins_a>; status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + + axp209: pmic at 34 { + compatible = "x-powers,axp209"; + reg = <0x34>; + interrupts = <0>; + + interrupt-controller; + #interrupt-cells = <1>; + + acin-supply = <&axp_ipsout_reg>; + vin2-supply = <&axp_ipsout_reg>; + vin3-supply = <&axp_ipsout_reg>; + ldo24in-supply = <&axp_ipsout_reg>; + ldo3in-supply = <&axp_ipsout_reg>; + ldo5in-supply = <&axp_ipsout_reg>; + + regulators { + compatible = "x-powers,axp20x-reg"; + + x-powers,dcdc-freq = <1500>; + + axp_ipsout_reg: axp_ipsout { + compatible = "regulator-fixed"; + regulator-name = "axp-ipsout"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + }; + + axp_vcore_reg: dcdc2 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <2275000>; + regulator-always-on; + }; + + axp_ddr_reg: dcdc3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + regulator-always-on; + }; + + axp_rtc_reg: ldo1 { + regulator-always-on; + }; + + axp_analog_reg: ldo2 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + axp_pll_reg: ldo3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + }; + + axp_hdmi_reg: ldo4 { + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <3300000>; + }; + + axp_mic_reg: ldo5 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + }; + }; }; };
arch/arm/boot/dts/sun4i-a10-cubieboard.dts +69 -0
75 lines not on this page · raw message
arch/arm/boot/dts/sun4i-a10-hackberry.dts +75 -0
81 lines not on this page · raw message
arch/arm/boot/dts/sun4i-a10-inet97fv2.dts +69 -0
75 lines not on this page · raw message
arch/arm/boot/dts/sun4i-a10-mini-xplus.dts +75 -0
81 lines not on this page · raw message
arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts +75 -0
81 lines not on this page · raw message
arch/arm/boot/dts/sun4i-a10-pcduino.dts +69 -0
75 lines not on this page · raw message
arch/arm/boot/dts/sun7i-a20-cubieboard2.dts +70 -0
76 lines not on this page · raw message
arch/arm/boot/dts/sun7i-a20-cubietruck.dts +70 -0
76 lines not on this page · raw message
arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts +70 -0
76 lines not on this page · raw message
Signature · 1 line
1.8.3.2
Mark Brown
maintainerPATCH v4 7/9 ARM: sun7i/sun4i: dt: Add AXP209 support to various boards
Quoted 4 lines · Carlo Caione
In all the DTs the min and max microvolt allowed for each regulator are actually the min and max voltage possible for the regulator itself. This is not safe but we do not have the ranges allowed for each board and the original Allwinner driver does exactly this way.
Is there any code in their kernel which varies the supply voltages? If there isn't then simply omitting the voltage ranges is the best option, leaving the supplies fixed. If there is then the range it uses is a good starting point. In general supplies will be fixed voltage on a given board unless there is a specific reason to vary them.
Review
Quoted 2 lines
(quoted diff) +2
-0+ regulators { + compatible = "x-powers,axp20x-reg";
This compatible isn't part of the driver.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140411/afa8ad0f/attachment.sig>
PATCH v4 7/9 ARM: sun7i/sun4i: dt: Add AXP209 support to various boards
Quoted 7 lines · Mark Brown
Quoted 4 lines · Carlo Caione
In all the DTs the min and max microvolt allowed for each regulator are actually the min and max voltage possible for the regulator itself. This is not safe but we do not have the ranges allowed for each board and the original Allwinner driver does exactly this way.
Quoted 5 lines
Is there any code in their kernel which varies the supply voltages? If there isn't then simply omitting the voltage ranges is the best option, leaving the supplies fixed. If there is then the range it uses is a good starting point. In general supplies will be fixed voltage on a given board unless there is a specific reason to vary them.
The supply voltage (ipsout) for the regulators is fixed and AFAIK there is no code for changing it.
I'll omit the voltage ranges then.
Quoted 4 lines
Review
Quoted 2 lines
(quoted diff) +2
-0+ regulators { + compatible = "x-powers,axp20x-reg";This compatible isn't part of the driver.
Yes I know. The problem here is that in v4 I had to fill in the field .of_compatible of the mfd_cell with "x-powers,axp20x-reg". This because the regulator_dev_lookup() checks for dev->of_node when looking for the supply so I needed the compatible string in the DT to have the dev->of_node filled in by mfd_add_device().
What do you suggest? Modify the regulator driver?
Thank you,
Signature · 1 line
Carlo Caione
Mark Brown
maintainerPATCH v4 7/9 ARM: sun7i/sun4i: dt: Add AXP209 support to various boards
Quoted 5 lines · Carlo Caione
Quoted 2 lines · Mark Brown
Quoted 2 lines
(quoted diff) +2
-0+ regulators { + compatible = "x-powers,axp20x-reg";
Quoted 8 lines
Quoted 1 line
This compatible isn't part of the driver.
Yes I know. The problem here is that in v4 I had to fill in the field .of_compatible of the
mfd_cellwith "x-powers,axp20x-reg". This because theregulator_dev_lookup()checks fordev->of_nodewhen looking for the supply so I needed the compatible string in the DT to have thedev->of_nodefilled in bymfd_add_device().
What do you suggest? Modify the regulator driver?
You're looking for regulator_bulk_register_supply_alias() in the MFD
driver (via parent_supplies in the MFD cell probably).
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140411/7b11da57/attachment.sig>
PATCH v4 7/9 ARM: sun7i/sun4i: dt: Add AXP209 support to various boards
Quoted 15 lines · Mark Brown
Quoted 5 lines · Carlo Caione
Quoted 2 lines · Mark Brown
Quoted 2 lines
(quoted diff) +2
-0+ regulators { + compatible = "x-powers,axp20x-reg";Quoted 8 lines
Quoted 1 line
This compatible isn't part of the driver.
Yes I know. The problem here is that in v4 I had to fill in the field .of_compatible of the
mfd_cellwith "x-powers,axp20x-reg". This because theregulator_dev_lookup()checks fordev->of_nodewhen looking for the supply so I needed the compatible string in the DT to have thedev->of_nodefilled in bymfd_add_device().
What do you suggest? Modify the regulator driver?
Quoted 2 lines
You're looking for
regulator_bulk_register_supply_alias()in the MFD driver (viaparent_suppliesin the MFD cell probably).
Hi Mark,
I'm fighting with a small issue when using the regulator_bulk_register_supply_alias(). Problem is that when using the .parent_supplies entry in the MFD driver, I hit the
WARN_ON(!list_empty(&dev->devres_head));
in linux/drivers/base/dd.c#L272, but, apart from the warning, everything seems to work correctly.
A possible explanation I gave myself is that in the mfd_add_device() we try to use the devm_* API when the regulator device is not bound to the driver yet (I found some information here
http://lists.infradead.org/pipermail/linux-arm-kernel/2012-June/104442.html).
Is this the case?
Thanks,
Signature · 1 line
Carlo Caione
Mark Brown
maintainerPATCH v4 7/9 ARM: sun7i/sun4i: dt: Add AXP209 support to various boards
Quoted 6 lines · Carlo Caione
I'm fighting with a small issue when using the
regulator_bulk_register_supply_alias(). Problem is that when using the .parent_supplies entry in the MFD driver, I hit theWARN_ON(!list_empty(&dev->devres_head));
Quoted 7 lines
in linux/drivers/base/dd.c#L272, but, apart from the warning, everything seems to work correctly.
A possible explanation I gave myself is that in themfd_add_device()we try to use the devm_* API when the regulator device is not bound to the driver yet (I found some information here
http://lists.infradead.org/pipermail/linux-arm-kernel/2012-June/104442.html).
Is this the case?
Without knowing more about the case you're hitting it's hard to say - I
do run a board which exercises the API for a MFD (with the arizona
drivers) regularly and haven't noticed an issue so there must be
something different about what you're trying to do.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140418/b18fbf1d/attachment.sig>
PATCH v4 7/9 ARM: sun7i/sun4i: dt: Add AXP209 support to various boards
Quoted 16 lines · Mark Brown
Quoted 6 lines · Carlo Caione
I'm fighting with a small issue when using the
regulator_bulk_register_supply_alias(). Problem is that when using the .parent_supplies entry in the MFD driver, I hit theWARN_ON(!list_empty(&dev->devres_head));
Quoted 7 lines
in linux/drivers/base/dd.c#L272, but, apart from the warning, everything seems to work correctly.
A possible explanation I gave myself is that in themfd_add_device()we try to use the devm_* API when the regulator device is not bound to the driver yet (I found some information here
http://lists.infradead.org/pipermail/linux-arm-kernel/2012-June/104442.html).
Is this the case?
Quoted 4 lines
Without knowing more about the case you're hitting it's hard to say - I do run a board which exercises the API for a MFD (with the arizona drivers) regularly and haven't noticed an issue so there must be something different about what you're trying to do.
I'm having a really hard time with this problem, so any hint is welcome :) The small modification I'm using on top of the patches in this series is here: http://bpaste.net/show/228330/
Unfortunately as I said I got this when booting:
http://bpaste.net/show/nUhUTzELT32v9HNPathL/
Thanks,
--
Carlo Caione
Mark Brown
maintainerPATCH v4 7/9 ARM: sun7i/sun4i: dt: Add AXP209 support to various boards
Quoted 6 lines · Carlo Caione
I'm having a really hard time with this problem, so any hint is welcome :) The small modification I'm using on top of the patches in this series is here: http://bpaste.net/show/228330/
Unfortunately as I said I got this when booting:
http://bpaste.net/show/nUhUTzELT32v9HNPathL/
Huh, actually the arizona drivers do show this (it was being masked in my logs by another unrelated bug). I guess the Wolfson guys aren't working with upstream much (though Charles did write the orignal code here...).
The issue is the MFD core, it shouldn't be using managed allocations here - the error reported by the assert is entirely correct. If the CODEC driver is bound and unbound it'll not be possible to reload it as things stand.
Your driver is correct but the implementation needs to be fixed -
possibly with an API change on free since at the minute the cells to be
freed don't get passed back into the MFD core when deallocating.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140424/f92224c1/attachment-0001.sig>
PATCH v4 7/9 ARM: sun7i/sun4i: dt: Add AXP209 support to various boards
Quoted 6 lines · Mark Brown
Quoted 3 lines · Carlo Caione
I'm having a really hard time with this problem, so any hint is welcome :) The small modification I'm using on top of the patches in this series is here: http://bpaste.net/show/228330/
Quoted 7 lines
Quoted 2 lines
Unfortunately as I said I got this when booting:
http://bpaste.net/show/nUhUTzELT32v9HNPathL/Huh, actually the arizona drivers do show this (it was being masked in my logs by another unrelated bug). I guess the Wolfson guys aren't working with upstream much (though Charles did write the orignal code here...).
I run upstream fairly regularly here (although mostly on Arndale rather than Speyside). On closer inspection of my kernel log don't seem to have anything related to it, which is odd.
Quoted 8 lines
The issue is the MFD core, it shouldn't be using managed allocations here - the error reported by the assert is entirely correct. If the CODEC driver is bound and unbound it'll not be possible to reload it as things stand.
Your driver is correct but the implementation needs to be fixed - possibly with an API change on free since at the minute the cells to be freed don't get passed back into the MFD core when deallocating.
This does indeed look broken, I will have a look and think about it. Unfortunately I am travelling most of next week, so if I don't manage to get something out over the weekend there may be a slight delay on me getting a fix out.
Thanks,
Charles
PATCH v4 7/9 ARM: sun7i/sun4i: dt: Add AXP209 support to various boards
Quoted 10 lines · Charles Keepax
Quoted 9 lines · Mark Brown
Quoted 6 lines · Carlo Caione
I'm having a really hard time with this problem, so any hint is welcome :) The small modification I'm using on top of the patches in this series is here: http://bpaste.net/show/228330/
Unfortunately as I said I got this when booting:
http://bpaste.net/show/nUhUTzELT32v9HNPathL/
Quoted 8 lines
Quoted 4 lines
Huh, actually the arizona drivers do show this (it was being masked in my logs by another unrelated bug). I guess the Wolfson guys aren't working with upstream much (though Charles did write the orignal code here...).
I run upstream fairly regularly here (although mostly on Arndale rather than Speyside). On closer inspection of my kernel log don't seem to have anything related to it, which is odd.
Ah ok seems I am getting an error but for some reason for me it shows up looking very unrelated to the supply mapping. In that it shows up much later in the log and doesn't seem to mention the MFD at all:
[ 2.938985] ------------[ cut here ]------------ [ 2.942216] WARNING: CPU: 0 PID: 1 at drivers/base/dd.c:272 driver_probe_device+0x127/0x184() [ 2.950680] Modules linked in: [ 2.953677] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.15.0-rc2+ #636 [ 2.960246] [<80011ab9>] (unwind_backtrace) from [<8000f461>] (show_stack+0x11/0x14) [ 2.967972] [<8000f461>] (show_stack) from [<804c3bab>] (dump_stack+0x53/0x68) [ 2.975171] [<804c3bab>] (dump_stack) from [<8001bc55>] (warn_slowpath_common+0x51/0x70) [ 2.983239] [<8001bc55>] (warn_slowpath_common) from [<8001bc8b>] (warn_slowpath_null+0x17/0x1c) [ 2.992009] [<8001bc8b>] (warn_slowpath_null) from [<802c040f>] (driver_probe_device+0x127/0x184) [ 3.000864] [<802c040f>] (driver_probe_device) from [<802c04bd>] (__driver_attach+0x51/0x54) [ 3.009278] [<802c04bd>] (__driver_attach) from [<802bf2fd>] (bus_for_each_dev+0x2d/0x4c) [ 3.017437] [<802bf2fd>] (bus_for_each_dev) from [<802bfde7>] (bus_add_driver+0x8f/0x130) [ 3.025603] [<802bfde7>] (bus_add_driver) from [<802c08b7>] (driver_register+0x3b/0x88) [ 3.033540] [<802c08b7>] (driver_register) from [<800087df>] (do_one_initcall+0xa7/0xe8) [ 3.041618] [<800087df>] (do_one_initcall) from [<8097d9e7>] (kernel_init_freeable+0xb7/0x14c) [ 3.050219] [<8097d9e7>] (kernel_init_freeable) from [<804bec2b>] (kernel_init+0xf/0xa4) [ 3.058286] [<804bec2b>] (kernel_init) from [<8000cebd>] (ret_from_fork+0x11/0x20) [ 3.065835] ---[ end trace f838bbad8b4018a1 ]---
The fix looks pretty trivial though, hopefully get it out tonight/tomorrow morning.
Thanks,
Charles
Mark Brown
maintainerPATCH v4 7/9 ARM: sun7i/sun4i: dt: Add AXP209 support to various boards
Quoted 4 lines · Charles Keepax
Ah ok seems I am getting an error but for some reason for me it shows up looking very unrelated to the supply mapping. In that it shows up much later in the log and doesn't seem to mention the MFD at all:
If you look at the warning you'll see that it's complaining that it's
trying to probe a device which has devres stuff attached to it which is
happens at the time the function driver gets loaded.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140424/c7006a8c/attachment.sig>
PATCH v4 7/9 ARM: sun7i/sun4i: dt: Add AXP209 support to various boards
In reply to Carlo CaioneHi Carlo,
Quoted 15 lines · Carlo Caione
Signed-off-by Hans de Goede <[email protected]>Signed-off-by Carlo Caione <[email protected]>---
In all the DTs the min and max microvolt allowed for each regulator are actually the min and max voltage possible for the regulator itself. This is not safe but we do not have the ranges allowed for each board and the original Allwinner driver does exactly this way.
AXP20x has the so called Power Path Management (IPS) that can select the proper power supply according to the status of the external power and the Li-battery status. The output of the IPS block is usually a 5V fixed voltage used as input supply for all the other regulators. This fixed voltage is represented in the DT as a fixed voltage regulator in the "regulator" subnode.
Quoted 10 lines
arch/arm/boot/dts/sun4i-a10-a1000.dts | 69 +++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-cubieboard.dts | 69 +++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-hackberry.dts | 75 +++++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-inet97fv2.dts | 69 +++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-mini-xplus.dts | 75 +++++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts | 75 +++++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-pcduino.dts | 69 +++++++++++++++++++++++ arch/arm/boot/dts/sun7i-a20-cubieboard2.dts | 70 +++++++++++++++++++++++ arch/arm/boot/dts/sun7i-a20-cubietruck.dts | 70 +++++++++++++++++++++++ arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts | 70 +++++++++++++++++++++++
That looks like a lot of them. Did you test all of them? Are all those regulators you define used on all these boards?
arch/arm/boot/dts/sun4i-a10-a1000.dts line 92
Quoted 12 lines
10 files changed, 711 insertions(+)arch/arm/boot/dts/sun4i-a10-a1000.dts +2
-0@@ -88,6 +88,75 @@ pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins_a>; status = "okay"; + #address-cells = <1>; + #size-cells = <0>;
That should be in the DTSI.
Quoted 7 lines
arch/arm/boot/dts/sun4i-a10-a1000.dts +7
-0+ axp209: pmic at 34 { + compatible = "x-powers,axp209"; + reg = <0x34>; + interrupts = <0>; + + interrupt-controller; + #interrupt-cells = <1>;
arch/arm/boot/dts/sun4i-a10-a1000.dts line 110
Quoted 10 lines
arch/arm/boot/dts/sun4i-a10-a1000.dts +10
-0+ + acin-supply = <&axp_ipsout_reg>; + vin2-supply = <&axp_ipsout_reg>; + vin3-supply = <&axp_ipsout_reg>; + ldo24in-supply = <&axp_ipsout_reg>; + ldo3in-supply = <&axp_ipsout_reg>; + ldo5in-supply = <&axp_ipsout_reg>; + + regulators { + compatible = "x-powers,axp20x-reg";
I told you a few times already, but don't introduce pattern-matching compatibles.
Quoted 137 lines
arch/arm/boot/dts/sun4i-a10-a1000.dts +49
-0+ + x-powers,dcdc-freq = <1500>; + + axp_ipsout_reg: axp_ipsout { + compatible = "regulator-fixed"; + regulator-name = "axp-ipsout"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + }; + + axp_vcore_reg: dcdc2 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <2275000>; + regulator-always-on; + }; + + axp_ddr_reg: dcdc3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + regulator-always-on; + }; + + axp_rtc_reg: ldo1 { + regulator-always-on; + }; + + axp_analog_reg: ldo2 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + axp_pll_reg: ldo3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + }; + + axp_hdmi_reg: ldo4 { + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <3300000>; + }; + + axp_mic_reg: ldo5 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + }; + }; }; };arch/arm/boot/dts/sun4i-a10-cubieboard.dts +69
-0@@ -80,6 +80,75 @@ pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins_a>; status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + + axp209: pmic at 34 { + compatible = "x-powers,axp209"; + reg = <0x34>; + interrupts = <0>; + + interrupt-controller; + #interrupt-cells = <1>; + + acin-supply = <&axp_ipsout_reg>; + vin2-supply = <&axp_ipsout_reg>; + vin3-supply = <&axp_ipsout_reg>; + ldo24in-supply = <&axp_ipsout_reg>; + ldo3in-supply = <&axp_ipsout_reg>; + ldo5in-supply = <&axp_ipsout_reg>; + + regulators { + compatible = "x-powers,axp20x-reg"; + + x-powers,dcdc-freq = <1500>; + + axp_ipsout_reg: axp_ipsout { + compatible = "regulator-fixed"; + regulator-name = "axp-ipsout"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + }; + + axp_vcore_reg: dcdc2 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <2275000>; + regulator-always-on; + }; + + axp_ddr_reg: dcdc3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + regulator-always-on; + }; + + axp_rtc_reg: ldo1 { + regulator-always-on; + }; + + axp_analog_reg: ldo2 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + axp_pll_reg: ldo3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + }; + + axp_hdmi_reg: ldo4 { + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <3300000>; + }; + + axp_mic_reg: ldo5 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + }; + }; }; i2c1: i2c at 01c2b000 {arch/arm/boot/dts/sun4i-a10-hackberry.dts +0
-0
arch/arm/boot/dts/sun4i-a10-hackberry.dts line 89
Quoted 8 lines
arch/arm/boot/dts/sun4i-a10-hackberry.dts +5
-0@@ -82,6 +82,81 @@ pinctrl-0 = <&uart0_pins_a>; status = "okay"; }; + + i2c0: i2c at 01c2ac00 { + pinctrl-names = "default"; + pinctrl-0 = <&i2c0_pins_a>; + status = "okay";
That should be in a separate patch.
These comments apply to most of the changes here. Make sure you edit all of them.
Thanks!
Maxime
Signature · 10 lines
Maxime Ripard, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140414/8e5946b5/attachment.sig>
[linux-sunxi] Re: [PATCH v4 7/9] ARM: sun7i/sun4i: dt: Add AXP209 support to various boards
Quoted 1 line · Maxime Ripard
Hi Carlo,
Hi Maxime,
Quoted 27 lines · Carlo Caione
Quoted 15 lines
Signed-off-by Hans de Goede <[email protected]>Signed-off-by Carlo Caione <[email protected]>---
In all the DTs the min and max microvolt allowed for each regulator are actually the min and max voltage possible for the regulator itself. This is not safe but we do not have the ranges allowed for each board and the original Allwinner driver does exactly this way.
AXP20x has the so called Power Path Management (IPS) that can select the proper power supply according to the status of the external power and the Li-battery status. The output of the IPS block is usually a 5V fixed voltage used as input supply for all the other regulators. This fixed voltage is represented in the DT as a fixed voltage regulator in the "regulator" subnode.
Quoted 10 lines
arch/arm/boot/dts/sun4i-a10-a1000.dts | 69 +++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-cubieboard.dts | 69 +++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-hackberry.dts | 75 +++++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-inet97fv2.dts | 69 +++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-mini-xplus.dts | 75 +++++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts | 75 +++++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-pcduino.dts | 69 +++++++++++++++++++++++ arch/arm/boot/dts/sun7i-a20-cubieboard2.dts | 70 +++++++++++++++++++++++ arch/arm/boot/dts/sun7i-a20-cubietruck.dts | 70 +++++++++++++++++++++++ arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts | 70 +++++++++++++++++++++++
Quoted 2 lines
That looks like a lot of them. Did you test all of them? Are all those regulators you define used on all these boards?
I tested it only on cubieboard2, all the other boards are contributed by Hans. I'll double check with Hans.
Quoted 14 lines
arch/arm/boot/dts/sun4i-a10-a1000.dts line 92
Quoted 12 lines
10 files changed, 711 insertions(+)arch/arm/boot/dts/sun4i-a10-a1000.dts +2
-0@@ -88,6 +88,75 @@ pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins_a>; status = "okay"; + #address-cells = <1>; + #size-cells = <0>;That should be in the DTSI.
Agree.
Quoted 12 lines
Quoted 12 lines
arch/arm/boot/dts/sun4i-a10-a1000.dts +12
-0+ axp209: pmic at 34 { + compatible = "x-powers,axp209"; + reg = <0x34>; + interrupts = <0>; + + interrupt-controller; + #interrupt-cells = <1>; + + acin-supply = <&axp_ipsout_reg>; + vin2-supply = <&axp_ipsout_reg>; + vin3-supply = <&axp_ipsout_reg>; + ldo24in-supply = <&axp_ipsout_reg>;
Quoted 8 lines
arch/arm/boot/dts/sun4i-a10-a1000.dts line 110
Quoted 5 lines
arch/arm/boot/dts/sun4i-a10-a1000.dts +5
-0+ ldo3in-supply = <&axp_ipsout_reg>; + ldo5in-supply = <&axp_ipsout_reg>; + + regulators { + compatible = "x-powers,axp20x-reg";I told you a few times already, but don't introduce pattern-matching compatibles.
Probably that compatible will be deleted in the next version using regulator_bulk_register_supply_alias() as suggested by Mark.
Quoted 148 lines
Quoted 137 lines
arch/arm/boot/dts/sun4i-a10-a1000.dts +49
-0+ + x-powers,dcdc-freq = <1500>; + + axp_ipsout_reg: axp_ipsout { + compatible = "regulator-fixed"; + regulator-name = "axp-ipsout"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + }; + + axp_vcore_reg: dcdc2 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <2275000>; + regulator-always-on; + }; + + axp_ddr_reg: dcdc3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + regulator-always-on; + }; + + axp_rtc_reg: ldo1 { + regulator-always-on; + }; + + axp_analog_reg: ldo2 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + axp_pll_reg: ldo3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + }; + + axp_hdmi_reg: ldo4 { + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <3300000>; + }; + + axp_mic_reg: ldo5 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + }; + }; }; };arch/arm/boot/dts/sun4i-a10-cubieboard.dts +69
-0@@ -80,6 +80,75 @@ pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins_a>; status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + + axp209: pmic at 34 { + compatible = "x-powers,axp209"; + reg = <0x34>; + interrupts = <0>; + + interrupt-controller; + #interrupt-cells = <1>; + + acin-supply = <&axp_ipsout_reg>; + vin2-supply = <&axp_ipsout_reg>; + vin3-supply = <&axp_ipsout_reg>; + ldo24in-supply = <&axp_ipsout_reg>; + ldo3in-supply = <&axp_ipsout_reg>; + ldo5in-supply = <&axp_ipsout_reg>; + + regulators { + compatible = "x-powers,axp20x-reg"; + + x-powers,dcdc-freq = <1500>; + + axp_ipsout_reg: axp_ipsout { + compatible = "regulator-fixed"; + regulator-name = "axp-ipsout"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + }; + + axp_vcore_reg: dcdc2 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <2275000>; + regulator-always-on; + }; + + axp_ddr_reg: dcdc3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + regulator-always-on; + }; + + axp_rtc_reg: ldo1 { + regulator-always-on; + }; + + axp_analog_reg: ldo2 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + axp_pll_reg: ldo3 { + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <3500000>; + }; + + axp_hdmi_reg: ldo4 { + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <3300000>; + }; + + axp_mic_reg: ldo5 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + }; + }; }; i2c1: i2c at 01c2b000 {arch/arm/boot/dts/sun4i-a10-hackberry.dts +0
-0arch/arm/boot/dts/sun4i-a10-hackberry.dts line 89
Quoted 8 lines
arch/arm/boot/dts/sun4i-a10-hackberry.dts +5
-0@@ -82,6 +82,81 @@ pinctrl-0 = <&uart0_pins_a>; status = "okay"; }; + + i2c0: i2c at 01c2ac00 { + pinctrl-names = "default"; + pinctrl-0 = <&i2c0_pins_a>; + status = "okay";That should be in a separate patch.
Quoted 2 lines
These comments apply to most of the changes here. Make sure you edit all of them.
Ok. Thanks.
Signature · 1 line
Carlo Caione
[linux-sunxi] Re: [PATCH v4 7/9] ARM: sun7i/sun4i: dt: Add AXP209 support to various boards
Hi,
Quoted 33 lines · Carlo Caione
Quoted 1 line · Maxime Ripard
Hi Carlo,
Hi Maxime,
Quoted 27 lines · Carlo Caione
Quoted 25 lines
Signed-off-by Hans de Goede <[email protected]>Signed-off-by Carlo Caione <[email protected]>---
In all the DTs the min and max microvolt allowed for each regulator are actually the min and max voltage possible for the regulator itself. This is not safe but we do not have the ranges allowed for each board and the original Allwinner driver does exactly this way.
AXP20x has the so called Power Path Management (IPS) that can select the proper power supply according to the status of the external power and the Li-battery status. The output of the IPS block is usually a 5V fixed voltage used as input supply for all the other regulators. This fixed voltage is represented in the DT as a fixed voltage regulator in the "regulator" subnode.
arch/arm/boot/dts/sun4i-a10-a1000.dts | 69 +++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-cubieboard.dts | 69 +++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-hackberry.dts | 75 +++++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-inet97fv2.dts | 69 +++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-mini-xplus.dts | 75 +++++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts | 75 +++++++++++++++++++++++++ arch/arm/boot/dts/sun4i-a10-pcduino.dts | 69 +++++++++++++++++++++++ arch/arm/boot/dts/sun7i-a20-cubieboard2.dts | 70 +++++++++++++++++++++++ arch/arm/boot/dts/sun7i-a20-cubietruck.dts | 70 +++++++++++++++++++++++ arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts | 70 +++++++++++++++++++++++
Quoted 5 lines
Quoted 2 lines
That looks like a lot of them. Did you test all of them? Are all those regulators you define used on all these boards?
I tested it only on cubieboard2, all the other boards are contributed by Hans. I'll double check with Hans.
Well my contribution stems from the time when we still had a dtsi for the regulators, if were going to do them per board, then we should be more precise IMHO.
As Mark has also mentioned we should probably pin the regulators to a certain voltage, except for those which we expect to be controlled by a driver, so basically all of them should be pinned to a certain voltage except for DCDC2 which gets used for the cpu voltage which we will want to scale as soon as we've a cpufreq driver.
While testing the latest revision of your code I also noticed that the kernel ends up disabling LDO3 and LDO4, which could be fine on some boards and a problem on other boards.
I think we need to be careful here. For now it may be best to only add the DCDC2 regulator to the dts, as we know that dcdc2 is used for the cpu voltage everywhere, and we will actually want to control that later on.
For the others, for the boards where we've schematics (*) it would be good to add the other regulators with fixed voltages as specified in the schematics. For the rest it may be best to simply leave the regulators alone / at their default settings.
Quoted 16 lines
Quoted 15 lines
arch/arm/boot/dts/sun4i-a10-a1000.dts line 92
Quoted 13 lines
10 files changed, 711 insertions(+)arch/arm/boot/dts/sun4i-a10-a1000.dts +2
-0@@ -88,6 +88,75 @@ pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins_a>; status = "okay"; + #address-cells = <1>; + #size-cells = <0>;That should be in the DTSI.
Quoted 1 line
Agree.
Note I've just send a patch-series for that and Maxime has added that series to his sunxi/dt-for-3.16 branch.
<snip>
Regards,
Hans
Mark Brown
maintainer[linux-sunxi] Re: [PATCH v4 7/9] ARM: sun7i/sun4i: dt: Add AXP209 support to various boards
On Mon, Apr 14, 2014 at 12:20:32PM +0200, Hans de Goede wrote:
Please fix your mailer to word wrap at less than 80 columns.
Quoted 5 lines
As Mark has also mentioned we should probably pin the regulators to a certain voltage, except for those which we expect to be controlled by a driver, so basically all of them should be pinned to a certain voltage except for DCDC2 which gets used for the cpu voltage which we will want to scale as soon as we've a cpufreq driver.
If you don't know what to do with the regulators and don't have any information on what's safe then you shouldn't be specifying a voltage at all.
Quoted 8 lines
While testing the latest revision of your code I also noticed that the kernel ends up disabling LDO3 and LDO4, which could be fine on some boards and a problem on other boards.
I think we need to be careful here. For now it may be best to only add the DCDC2 regulator to the dts, as we know that dcdc2 is used for the cpu voltage everywhere, and we will actually want to control that later on.
You need to at least specify that regulators that need to be kept on are always-on.
Quoted 4 lines
For the others, for the boards where we've schematics (*) it would be good to add the other regulators with fixed voltages as specified in the schematics. For the rest it may be best to simply leave the regulators alone / at their default settings.
If everyone has been running the board at a voltage different to that in
the schematic then I'd not assume that everything has been validated at
the voltage in the schematic, if production firmware is available that's
going to be a more reliable guide than the schematic but it sounds like
all these boards have just been left to run at their default voltages.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140414/c1fb3028/attachment.sig>
PATCH v4 8/9 ARM: sunxi: Add AXP20x support in defconfig
In reply to Carlo Caione--- arch/arm/configs/sunxi_defconfig | 4 ++++ 1 file changed, 4 insertions(+)
arch/arm/configs/sunxi_defconfig +4 -0
@@ -40,6 +40,8 @@ CONFIG_SUN4I_EMAC=y # CONFIG_NET_VENDOR_STMICRO is not set # CONFIG_NET_VENDOR_WIZNET is not set # CONFIG_WLAN is not set +CONFIG_INPUT_MISC=y +CONFIG_INPUT_AXP20X_PEK=y CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_NR_UARTS=8
@@ -55,6 +57,7 @@ CONFIG_GPIO_SYSFS=y # CONFIG_HWMON is not set CONFIG_WATCHDOG=y CONFIG_SUNXI_WATCHDOG=y +CONFIG_MFD_AXP20X=y # CONFIG_USB_SUPPORT is not set CONFIG_NEW_LEDS=y CONFIG_LEDS_CLASS=y
@@ -69,3 +72,4 @@ CONFIG_NFS_FS=y CONFIG_ROOT_NFS=y CONFIG_NLS=y CONFIG_PRINTK_TIME=y +CONFIG_REGULATOR_AXP20X=y
Signature · 1 line
1.8.3.2
PATCH v4 9/9 ARM: sunxi: Add AXP20x support multi_v7_defconfig
In reply to Carlo Caione--- arch/arm/configs/multi_v7_defconfig | 3 +++ 1 file changed, 3 insertions(+)
arch/arm/configs/multi_v7_defconfig +3 -0
@@ -134,6 +134,7 @@ CONFIG_KEYBOARD_SPEAR=y CONFIG_KEYBOARD_CROS_EC=y CONFIG_MOUSE_PS2_ELANTECH=y CONFIG_INPUT_MISC=y +CONFIG_INPUT_AXP20X_PEK=y CONFIG_INPUT_MPU3050=y CONFIG_SERIO_AMBAKMI=y CONFIG_SERIAL_8250=y
@@ -189,6 +190,7 @@ CONFIG_SENSORS_LM90=y CONFIG_THERMAL=y CONFIG_ARMADA_THERMAL=y CONFIG_MFD_AS3722=y +CONFIG_MFD_AXP20X=y CONFIG_MFD_CROS_EC=y CONFIG_MFD_CROS_EC_SPI=y CONFIG_MFD_MAX8907=y
@@ -199,6 +201,7 @@ CONFIG_MFD_TPS65910=y CONFIG_REGULATOR_VIRTUAL_CONSUMER=y CONFIG_REGULATOR_AB8500=y CONFIG_REGULATOR_AS3722=y +CONFIG_REGULATOR_AXP20X=y CONFIG_REGULATOR_GPIO=y CONFIG_REGULATOR_MAX8907=y CONFIG_REGULATOR_PALMAS=y
Signature · 1 line
1.8.3.2