* [PATCH v3 1/6] mfd: max77620: Fix swapped FPS_PERIOD_MAX_US values
2019-04-24 22:48 [PATCH v3 0/6] Add support for Maxim 77663 MFD Dmitry Osipenko
@ 2019-04-24 22:48 ` Dmitry Osipenko
2019-04-24 22:48 ` [PATCH v3 2/6] mfd: max77620: Support Maxim 77663 Dmitry Osipenko
` (4 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Dmitry Osipenko @ 2019-04-24 22:48 UTC (permalink / raw)
To: Lee Jones, Rob Herring, Mark Rutland, Liam Girdwood, Mark Brown,
Laxman Dewangan, Mallikarjun Kasoju, Thierry Reding,
Jonathan Hunter
Cc: devicetree, linux-tegra, linux-kernel
The FPS_PERIOD_MAX_US definitions are swapped for MAX20024 and MAX77620,
fix it.
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
include/linux/mfd/max77620.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/linux/mfd/max77620.h b/include/linux/mfd/max77620.h
index ad2a9a852aea..b4fd5a7c2aaa 100644
--- a/include/linux/mfd/max77620.h
+++ b/include/linux/mfd/max77620.h
@@ -136,8 +136,8 @@
#define MAX77620_FPS_PERIOD_MIN_US 40
#define MAX20024_FPS_PERIOD_MIN_US 20
-#define MAX77620_FPS_PERIOD_MAX_US 2560
-#define MAX20024_FPS_PERIOD_MAX_US 5120
+#define MAX20024_FPS_PERIOD_MAX_US 2560
+#define MAX77620_FPS_PERIOD_MAX_US 5120
#define MAX77620_REG_FPS_GPIO1 0x54
#define MAX77620_REG_FPS_GPIO2 0x55
--
2.21.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 2/6] mfd: max77620: Support Maxim 77663
2019-04-24 22:48 [PATCH v3 0/6] Add support for Maxim 77663 MFD Dmitry Osipenko
2019-04-24 22:48 ` [PATCH v3 1/6] mfd: max77620: Fix swapped FPS_PERIOD_MAX_US values Dmitry Osipenko
@ 2019-04-24 22:48 ` Dmitry Osipenko
2019-04-24 22:48 ` [PATCH v3 3/6] regulator: " Dmitry Osipenko
` (3 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Dmitry Osipenko @ 2019-04-24 22:48 UTC (permalink / raw)
To: Lee Jones, Rob Herring, Mark Rutland, Liam Girdwood, Mark Brown,
Laxman Dewangan, Mallikarjun Kasoju, Thierry Reding,
Jonathan Hunter
Cc: devicetree, linux-tegra, linux-kernel
Add support for Maxim 77663 using the Max77620 driver. The hardware
is very similar to Max77663/20024, although there are couple minor
differences.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
drivers/mfd/max77620.c | 69 +++++++++++++++++++++++++++++++++++-
include/linux/mfd/max77620.h | 1 +
2 files changed, 69 insertions(+), 1 deletion(-)
diff --git a/drivers/mfd/max77620.c b/drivers/mfd/max77620.c
index d8ddd1a6f304..9b0009c29610 100644
--- a/drivers/mfd/max77620.c
+++ b/drivers/mfd/max77620.c
@@ -111,6 +111,26 @@ static const struct mfd_cell max20024_children[] = {
},
};
+static const struct mfd_cell max77663_children[] = {
+ { .name = "max77620-pinctrl", },
+ { .name = "max77620-clock", },
+ { .name = "max77663-pmic", },
+ { .name = "max77620-watchdog", },
+ {
+ .name = "max77620-gpio",
+ .resources = gpio_resources,
+ .num_resources = ARRAY_SIZE(gpio_resources),
+ }, {
+ .name = "max77620-rtc",
+ .resources = rtc_resources,
+ .num_resources = ARRAY_SIZE(rtc_resources),
+ }, {
+ .name = "max77663-power",
+ .resources = power_resources,
+ .num_resources = ARRAY_SIZE(power_resources),
+ },
+};
+
static const struct regmap_range max77620_readable_ranges[] = {
regmap_reg_range(MAX77620_REG_CNFGGLBL1, MAX77620_REG_DVSSD4),
};
@@ -171,6 +191,35 @@ static const struct regmap_config max20024_regmap_config = {
.volatile_table = &max77620_volatile_table,
};
+static const struct regmap_range max77663_readable_ranges[] = {
+ regmap_reg_range(MAX77620_REG_CNFGGLBL1, MAX77620_REG_CID5),
+};
+
+static const struct regmap_access_table max77663_readable_table = {
+ .yes_ranges = max77663_readable_ranges,
+ .n_yes_ranges = ARRAY_SIZE(max77663_readable_ranges),
+};
+
+static const struct regmap_range max77663_writable_ranges[] = {
+ regmap_reg_range(MAX77620_REG_CNFGGLBL1, MAX77620_REG_CID5),
+};
+
+static const struct regmap_access_table max77663_writable_table = {
+ .yes_ranges = max77663_writable_ranges,
+ .n_yes_ranges = ARRAY_SIZE(max77663_writable_ranges),
+};
+
+static const struct regmap_config max77663_regmap_config = {
+ .name = "power-slave",
+ .reg_bits = 8,
+ .val_bits = 8,
+ .max_register = MAX77620_REG_CID5 + 1,
+ .cache_type = REGCACHE_RBTREE,
+ .rd_table = &max77663_readable_table,
+ .wr_table = &max77663_writable_table,
+ .volatile_table = &max77620_volatile_table,
+};
+
/*
* MAX77620 and MAX20024 has the following steps of the interrupt handling
* for TOP interrupts:
@@ -237,6 +286,9 @@ static int max77620_get_fps_period_reg_value(struct max77620_chip *chip,
case MAX20024:
fps_min_period = MAX20024_FPS_PERIOD_MIN_US;
break;
+ case MAX77663:
+ fps_min_period = MAX20024_FPS_PERIOD_MIN_US;
+ break;
case MAX77620:
fps_min_period = MAX77620_FPS_PERIOD_MIN_US;
break;
@@ -274,6 +326,9 @@ static int max77620_config_fps(struct max77620_chip *chip,
case MAX77620:
fps_max_period = MAX77620_FPS_PERIOD_MAX_US;
break;
+ case MAX77663:
+ fps_max_period = MAX20024_FPS_PERIOD_MAX_US;
+ break;
default:
return -EINVAL;
}
@@ -375,6 +430,9 @@ static int max77620_initialise_fps(struct max77620_chip *chip)
}
skip_fps:
+ if (chip->chip_id == MAX77663)
+ return 0;
+
/* Enable wake on EN0 pin */
ret = regmap_update_bits(chip->rmap, MAX77620_REG_ONOFFCNFG2,
MAX77620_ONOFFCNFG2_WK_EN0,
@@ -453,6 +511,11 @@ static int max77620_probe(struct i2c_client *client,
n_mfd_cells = ARRAY_SIZE(max20024_children);
rmap_config = &max20024_regmap_config;
break;
+ case MAX77663:
+ mfd_cells = max77663_children;
+ n_mfd_cells = ARRAY_SIZE(max77663_children);
+ rmap_config = &max77663_regmap_config;
+ break;
default:
dev_err(chip->dev, "ChipID is invalid %d\n", chip->chip_id);
return -EINVAL;
@@ -546,6 +609,9 @@ static int max77620_i2c_suspend(struct device *dev)
return ret;
}
+ if (chip->chip_id == MAX77663)
+ goto out;
+
/* Disable WK_EN0 */
ret = regmap_update_bits(chip->rmap, MAX77620_REG_ONOFFCNFG2,
MAX77620_ONOFFCNFG2_WK_EN0, 0);
@@ -581,7 +647,7 @@ static int max77620_i2c_resume(struct device *dev)
* For MAX20024: No need to configure WKEN0 on resume as
* it is configured on Init.
*/
- if (chip->chip_id == MAX20024)
+ if (chip->chip_id == MAX20024 || chip->chip_id == MAX77663)
goto out;
/* Enable WK_EN0 */
@@ -603,6 +669,7 @@ static int max77620_i2c_resume(struct device *dev)
static const struct i2c_device_id max77620_id[] = {
{"max77620", MAX77620},
{"max20024", MAX20024},
+ {"max77663", MAX77663},
{},
};
diff --git a/include/linux/mfd/max77620.h b/include/linux/mfd/max77620.h
index b4fd5a7c2aaa..82407fe85ca2 100644
--- a/include/linux/mfd/max77620.h
+++ b/include/linux/mfd/max77620.h
@@ -324,6 +324,7 @@ enum max77620_fps_src {
enum max77620_chip_id {
MAX77620,
MAX20024,
+ MAX77663,
};
struct max77620_chip {
--
2.21.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 3/6] regulator: max77620: Support Maxim 77663
2019-04-24 22:48 [PATCH v3 0/6] Add support for Maxim 77663 MFD Dmitry Osipenko
2019-04-24 22:48 ` [PATCH v3 1/6] mfd: max77620: Fix swapped FPS_PERIOD_MAX_US values Dmitry Osipenko
2019-04-24 22:48 ` [PATCH v3 2/6] mfd: max77620: Support Maxim 77663 Dmitry Osipenko
@ 2019-04-24 22:48 ` Dmitry Osipenko
2019-04-25 17:41 ` Mark Brown
2019-04-24 22:48 ` [PATCH v3 4/6] dt-bindings: mfd: max77620: Add compatible for " Dmitry Osipenko
` (2 subsequent siblings)
5 siblings, 1 reply; 12+ messages in thread
From: Dmitry Osipenko @ 2019-04-24 22:48 UTC (permalink / raw)
To: Lee Jones, Rob Herring, Mark Rutland, Liam Girdwood, Mark Brown,
Laxman Dewangan, Mallikarjun Kasoju, Thierry Reding,
Jonathan Hunter
Cc: devicetree, linux-tegra, linux-kernel
Add support for Maxim 77663.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
drivers/regulator/max77620-regulator.c | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/drivers/regulator/max77620-regulator.c b/drivers/regulator/max77620-regulator.c
index 1607ac673e44..7d6b53828056 100644
--- a/drivers/regulator/max77620-regulator.c
+++ b/drivers/regulator/max77620-regulator.c
@@ -761,6 +761,24 @@ static struct max77620_regulator_info max20024_regs_info[MAX77620_NUM_REGS] = {
RAIL_LDO(LDO8, ldo8, "in-ldo7-8", N, 800000, 3950000, 50000),
};
+static struct max77620_regulator_info max77663_regs_info[MAX77620_NUM_REGS] = {
+ RAIL_SD(SD0, sd0, "in-sd0", SD0, 600000, 3387500, 12500, 0xFF, NONE),
+ RAIL_SD(SD1, sd1, "in-sd1", SD1, 800000, 1587500, 12500, 0xFF, NONE),
+ RAIL_SD(SD2, sd2, "in-sd2", SDX, 600000, 3787500, 12500, 0xFF, NONE),
+ RAIL_SD(SD3, sd3, "in-sd3", SDX, 600000, 3787500, 12500, 0xFF, NONE),
+ RAIL_SD(SD4, sd4, "in-sd4", SDX, 600000, 3787500, 12500, 0xFF, NONE),
+
+ RAIL_LDO(LDO0, ldo0, "in-ldo0-1", N, 800000, 2375000, 25000),
+ RAIL_LDO(LDO1, ldo1, "in-ldo0-1", N, 800000, 2375000, 25000),
+ RAIL_LDO(LDO2, ldo2, "in-ldo2", P, 800000, 3950000, 50000),
+ RAIL_LDO(LDO3, ldo3, "in-ldo3-5", P, 800000, 3950000, 50000),
+ RAIL_LDO(LDO4, ldo4, "in-ldo4-6", P, 800000, 1587500, 12500),
+ RAIL_LDO(LDO5, ldo5, "in-ldo3-5", P, 800000, 3950000, 50000),
+ RAIL_LDO(LDO6, ldo6, "in-ldo4-6", P, 800000, 3950000, 50000),
+ RAIL_LDO(LDO7, ldo7, "in-ldo7-8", N, 800000, 3950000, 50000),
+ RAIL_LDO(LDO8, ldo8, "in-ldo7-8", N, 800000, 3950000, 50000),
+};
+
static int max77620_regulator_probe(struct platform_device *pdev)
{
struct max77620_chip *max77620_chip = dev_get_drvdata(pdev->dev.parent);
@@ -785,9 +803,14 @@ static int max77620_regulator_probe(struct platform_device *pdev)
case MAX77620:
rinfo = max77620_regs_info;
break;
- default:
+ case MAX20024:
rinfo = max20024_regs_info;
break;
+ case MAX77663:
+ rinfo = max77663_regs_info;
+ break;
+ default:
+ return -EINVAL;
}
config.regmap = pmic->rmap;
@@ -881,6 +904,7 @@ static const struct dev_pm_ops max77620_regulator_pm_ops = {
static const struct platform_device_id max77620_regulator_devtype[] = {
{ .name = "max77620-pmic", },
{ .name = "max20024-pmic", },
+ { .name = "max77663-pmic", },
{},
};
MODULE_DEVICE_TABLE(platform, max77620_regulator_devtype);
--
2.21.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v3 3/6] regulator: max77620: Support Maxim 77663
2019-04-24 22:48 ` [PATCH v3 3/6] regulator: " Dmitry Osipenko
@ 2019-04-25 17:41 ` Mark Brown
0 siblings, 0 replies; 12+ messages in thread
From: Mark Brown @ 2019-04-25 17:41 UTC (permalink / raw)
To: Dmitry Osipenko
Cc: Lee Jones, Rob Herring, Mark Rutland, Liam Girdwood,
Laxman Dewangan, Mallikarjun Kasoju, Thierry Reding,
Jonathan Hunter, devicetree, linux-tegra, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 139 bytes --]
On Thu, Apr 25, 2019 at 01:48:57AM +0300, Dmitry Osipenko wrote:
> Add support for Maxim 77663.
Acked-by: Mark Brown <broonie@kernel.org>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v3 4/6] dt-bindings: mfd: max77620: Add compatible for Maxim 77663
2019-04-24 22:48 [PATCH v3 0/6] Add support for Maxim 77663 MFD Dmitry Osipenko
` (2 preceding siblings ...)
2019-04-24 22:48 ` [PATCH v3 3/6] regulator: " Dmitry Osipenko
@ 2019-04-24 22:48 ` Dmitry Osipenko
2019-04-30 22:53 ` Rob Herring
2019-04-24 22:48 ` [PATCH v3 5/6] dt-bindings: mfd: max77620: Add maxim,system-power-controller property Dmitry Osipenko
2019-04-24 22:49 ` [PATCH v3 6/6] mfd: max77620: Provide system power-off functionality Dmitry Osipenko
5 siblings, 1 reply; 12+ messages in thread
From: Dmitry Osipenko @ 2019-04-24 22:48 UTC (permalink / raw)
To: Lee Jones, Rob Herring, Mark Rutland, Liam Girdwood, Mark Brown,
Laxman Dewangan, Mallikarjun Kasoju, Thierry Reding,
Jonathan Hunter
Cc: devicetree, linux-tegra, linux-kernel
Maxim 77663 has a few minor differences in regards to hardware interface
and available capabilities by comparing it with 77620 and 20024 models,
hence re-use 77620 device-tree binding for the 77663.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
Documentation/devicetree/bindings/mfd/max77620.txt | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/mfd/max77620.txt b/Documentation/devicetree/bindings/mfd/max77620.txt
index 9c16d51cc15b..9058499051e0 100644
--- a/Documentation/devicetree/bindings/mfd/max77620.txt
+++ b/Documentation/devicetree/bindings/mfd/max77620.txt
@@ -4,7 +4,8 @@ Required properties:
-------------------
- compatible: Must be one of
"maxim,max77620"
- "maxim,max20024".
+ "maxim,max20024"
+ "maxim,max77663".
- reg: I2C device address.
Optional properties:
@@ -105,6 +106,7 @@ Optional properties:
Here supported time periods by device in microseconds are as follows:
MAX77620 supports 40, 80, 160, 320, 640, 1280, 2560 and 5120 microseconds.
MAX20024 supports 20, 40, 80, 160, 320, 640, 1280 and 2540 microseconds.
+MAX77663 supports 20, 40, 80, 160, 320, 640, 1280 and 2540 microseconds.
-maxim,power-ok-control: configure map power ok bit
1: Enables POK(Power OK) to control nRST_IO and GPIO1
--
2.21.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v3 4/6] dt-bindings: mfd: max77620: Add compatible for Maxim 77663
2019-04-24 22:48 ` [PATCH v3 4/6] dt-bindings: mfd: max77620: Add compatible for " Dmitry Osipenko
@ 2019-04-30 22:53 ` Rob Herring
0 siblings, 0 replies; 12+ messages in thread
From: Rob Herring @ 2019-04-30 22:53 UTC (permalink / raw)
To: Dmitry Osipenko
Cc: Lee Jones, Mark Rutland, Liam Girdwood, Mark Brown,
Laxman Dewangan, Mallikarjun Kasoju, Thierry Reding,
Jonathan Hunter, devicetree, linux-tegra, linux-kernel
On Thu, Apr 25, 2019 at 01:48:58AM +0300, Dmitry Osipenko wrote:
> Maxim 77663 has a few minor differences in regards to hardware interface
> and available capabilities by comparing it with 77620 and 20024 models,
> hence re-use 77620 device-tree binding for the 77663.
>
> Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
> ---
> Documentation/devicetree/bindings/mfd/max77620.txt | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/devicetree/bindings/mfd/max77620.txt b/Documentation/devicetree/bindings/mfd/max77620.txt
> index 9c16d51cc15b..9058499051e0 100644
> --- a/Documentation/devicetree/bindings/mfd/max77620.txt
> +++ b/Documentation/devicetree/bindings/mfd/max77620.txt
> @@ -4,7 +4,8 @@ Required properties:
> -------------------
> - compatible: Must be one of
> "maxim,max77620"
> - "maxim,max20024".
> + "maxim,max20024"
> + "maxim,max77663".
Drop the period so we don't have to remove it on the next addition.
With that,
Reviewed-by: Rob Herring <robh@kernel.org>
> - reg: I2C device address.
>
> Optional properties:
> @@ -105,6 +106,7 @@ Optional properties:
> Here supported time periods by device in microseconds are as follows:
> MAX77620 supports 40, 80, 160, 320, 640, 1280, 2560 and 5120 microseconds.
> MAX20024 supports 20, 40, 80, 160, 320, 640, 1280 and 2540 microseconds.
> +MAX77663 supports 20, 40, 80, 160, 320, 640, 1280 and 2540 microseconds.
>
> -maxim,power-ok-control: configure map power ok bit
> 1: Enables POK(Power OK) to control nRST_IO and GPIO1
> --
> 2.21.0
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v3 5/6] dt-bindings: mfd: max77620: Add maxim,system-power-controller property
2019-04-24 22:48 [PATCH v3 0/6] Add support for Maxim 77663 MFD Dmitry Osipenko
` (3 preceding siblings ...)
2019-04-24 22:48 ` [PATCH v3 4/6] dt-bindings: mfd: max77620: Add compatible for " Dmitry Osipenko
@ 2019-04-24 22:48 ` Dmitry Osipenko
2019-04-30 22:55 ` Rob Herring
2019-04-24 22:49 ` [PATCH v3 6/6] mfd: max77620: Provide system power-off functionality Dmitry Osipenko
5 siblings, 1 reply; 12+ messages in thread
From: Dmitry Osipenko @ 2019-04-24 22:48 UTC (permalink / raw)
To: Lee Jones, Rob Herring, Mark Rutland, Liam Girdwood, Mark Brown,
Laxman Dewangan, Mallikarjun Kasoju, Thierry Reding,
Jonathan Hunter
Cc: devicetree, linux-tegra, linux-kernel
Add new property that designates the PMIC as the system's power
controller.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
Documentation/devicetree/bindings/mfd/max77620.txt | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Documentation/devicetree/bindings/mfd/max77620.txt b/Documentation/devicetree/bindings/mfd/max77620.txt
index 9058499051e0..dda6d158b170 100644
--- a/Documentation/devicetree/bindings/mfd/max77620.txt
+++ b/Documentation/devicetree/bindings/mfd/max77620.txt
@@ -18,6 +18,9 @@ Optional properties:
IRQ numbers for different interrupt source of MAX77620
are defined at dt-bindings/mfd/max77620.h.
+- maxim,system-power-controller: Indicates that this PMIC is controlling the
+ system power.
+
Optional subnodes and their properties:
=======================================
--
2.21.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v3 5/6] dt-bindings: mfd: max77620: Add maxim,system-power-controller property
2019-04-24 22:48 ` [PATCH v3 5/6] dt-bindings: mfd: max77620: Add maxim,system-power-controller property Dmitry Osipenko
@ 2019-04-30 22:55 ` Rob Herring
0 siblings, 0 replies; 12+ messages in thread
From: Rob Herring @ 2019-04-30 22:55 UTC (permalink / raw)
To: Dmitry Osipenko
Cc: Lee Jones, Mark Rutland, Liam Girdwood, Mark Brown,
Laxman Dewangan, Mallikarjun Kasoju, Thierry Reding,
Jonathan Hunter, devicetree, linux-tegra, linux-kernel
On Thu, Apr 25, 2019 at 01:48:59AM +0300, Dmitry Osipenko wrote:
> Add new property that designates the PMIC as the system's power
> controller.
>
> Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
> ---
> Documentation/devicetree/bindings/mfd/max77620.txt | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/mfd/max77620.txt b/Documentation/devicetree/bindings/mfd/max77620.txt
> index 9058499051e0..dda6d158b170 100644
> --- a/Documentation/devicetree/bindings/mfd/max77620.txt
> +++ b/Documentation/devicetree/bindings/mfd/max77620.txt
> @@ -18,6 +18,9 @@ Optional properties:
> IRQ numbers for different interrupt source of MAX77620
> are defined at dt-bindings/mfd/max77620.h.
>
> +- maxim,system-power-controller: Indicates that this PMIC is controlling the
> + system power.
Drop the 'maxim'. We have a standard property for this.
> +
> Optional subnodes and their properties:
> =======================================
>
> --
> 2.21.0
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v3 6/6] mfd: max77620: Provide system power-off functionality
2019-04-24 22:48 [PATCH v3 0/6] Add support for Maxim 77663 MFD Dmitry Osipenko
` (4 preceding siblings ...)
2019-04-24 22:48 ` [PATCH v3 5/6] dt-bindings: mfd: max77620: Add maxim,system-power-controller property Dmitry Osipenko
@ 2019-04-24 22:49 ` Dmitry Osipenko
2019-04-25 11:22 ` Thierry Reding
5 siblings, 1 reply; 12+ messages in thread
From: Dmitry Osipenko @ 2019-04-24 22:49 UTC (permalink / raw)
To: Lee Jones, Rob Herring, Mark Rutland, Liam Girdwood, Mark Brown,
Laxman Dewangan, Mallikarjun Kasoju, Thierry Reding,
Jonathan Hunter
Cc: devicetree, linux-tegra, linux-kernel
Provide system power-off functionality that allows to turn off machine
gracefully.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
drivers/mfd/max77620.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/drivers/mfd/max77620.c b/drivers/mfd/max77620.c
index 9b0009c29610..e56223bde568 100644
--- a/drivers/mfd/max77620.c
+++ b/drivers/mfd/max77620.c
@@ -37,6 +37,8 @@
#include <linux/regmap.h>
#include <linux/slab.h>
+static struct max77620_chip *max77620_scratch;
+
static const struct resource gpio_resources[] = {
DEFINE_RES_IRQ(MAX77620_IRQ_TOP_GPIO),
};
@@ -481,6 +483,15 @@ static int max77620_read_es_version(struct max77620_chip *chip)
return ret;
}
+static void max77620_pm_power_off(void)
+{
+ struct max77620_chip *chip = max77620_scratch;
+
+ regmap_update_bits(chip->rmap, MAX77620_REG_ONOFFCNFG1,
+ MAX77620_ONOFFCNFG1_SFT_RST,
+ MAX77620_ONOFFCNFG1_SFT_RST);
+}
+
static int max77620_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
@@ -488,6 +499,7 @@ static int max77620_probe(struct i2c_client *client,
struct max77620_chip *chip;
const struct mfd_cell *mfd_cells;
int n_mfd_cells;
+ bool pm_off;
int ret;
chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
@@ -554,6 +566,13 @@ static int max77620_probe(struct i2c_client *client,
return ret;
}
+ pm_off = of_property_read_bool(client->dev.of_node,
+ "maxim,system-power-controller");
+ if (pm_off && !pm_power_off) {
+ max77620_scratch = chip;
+ pm_power_off = max77620_pm_power_off;
+ }
+
return 0;
}
--
2.21.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v3 6/6] mfd: max77620: Provide system power-off functionality
2019-04-24 22:49 ` [PATCH v3 6/6] mfd: max77620: Provide system power-off functionality Dmitry Osipenko
@ 2019-04-25 11:22 ` Thierry Reding
2019-04-25 14:58 ` Dmitry Osipenko
0 siblings, 1 reply; 12+ messages in thread
From: Thierry Reding @ 2019-04-25 11:22 UTC (permalink / raw)
To: Dmitry Osipenko
Cc: Lee Jones, Rob Herring, Mark Rutland, Liam Girdwood, Mark Brown,
Laxman Dewangan, Mallikarjun Kasoju, Jonathan Hunter, devicetree,
linux-tegra, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 2801 bytes --]
On Thu, Apr 25, 2019 at 01:49:00AM +0300, Dmitry Osipenko wrote:
> Provide system power-off functionality that allows to turn off machine
> gracefully.
>
> Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
> ---
> drivers/mfd/max77620.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/drivers/mfd/max77620.c b/drivers/mfd/max77620.c
> index 9b0009c29610..e56223bde568 100644
> --- a/drivers/mfd/max77620.c
> +++ b/drivers/mfd/max77620.c
> @@ -37,6 +37,8 @@
> #include <linux/regmap.h>
> #include <linux/slab.h>
>
> +static struct max77620_chip *max77620_scratch;
> +
> static const struct resource gpio_resources[] = {
> DEFINE_RES_IRQ(MAX77620_IRQ_TOP_GPIO),
> };
> @@ -481,6 +483,15 @@ static int max77620_read_es_version(struct max77620_chip *chip)
> return ret;
> }
>
> +static void max77620_pm_power_off(void)
> +{
> + struct max77620_chip *chip = max77620_scratch;
> +
> + regmap_update_bits(chip->rmap, MAX77620_REG_ONOFFCNFG1,
> + MAX77620_ONOFFCNFG1_SFT_RST,
> + MAX77620_ONOFFCNFG1_SFT_RST);
> +}
I think this is only partially correct. See here for a driver that I had
proposed a while back:
https://github.com/thierryreding/linux/commit/d0eaa77b402f62bd236d76e3edeb3ccf296cbe81
Note that that driver is part of a larger series to move away from all
the pm_power_off hackery. There was a fair bit of discussion back when I
proposed the original power off driver for max77620:
https://lkml.org/lkml/2017/1/12/470
I think I may have a more up-to-date local branch of the system-power
branch from my github repository if you're interested in looking at some
of that code. There wasn't a whole lot of feedback on the patches, but
the feedback I did get was generally positive. However, since it didn't
gain any traction I eventually abandoned that effort. It might be worth
picking it up again, since, as far as I can tell, the situation around
power off and restart hasn't changed in the meantime.
Thierry
> +
> static int max77620_probe(struct i2c_client *client,
> const struct i2c_device_id *id)
> {
> @@ -488,6 +499,7 @@ static int max77620_probe(struct i2c_client *client,
> struct max77620_chip *chip;
> const struct mfd_cell *mfd_cells;
> int n_mfd_cells;
> + bool pm_off;
> int ret;
>
> chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
> @@ -554,6 +566,13 @@ static int max77620_probe(struct i2c_client *client,
> return ret;
> }
>
> + pm_off = of_property_read_bool(client->dev.of_node,
> + "maxim,system-power-controller");
> + if (pm_off && !pm_power_off) {
> + max77620_scratch = chip;
> + pm_power_off = max77620_pm_power_off;
> + }
> +
> return 0;
> }
>
> --
> 2.21.0
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 6/6] mfd: max77620: Provide system power-off functionality
2019-04-25 11:22 ` Thierry Reding
@ 2019-04-25 14:58 ` Dmitry Osipenko
0 siblings, 0 replies; 12+ messages in thread
From: Dmitry Osipenko @ 2019-04-25 14:58 UTC (permalink / raw)
To: Thierry Reding
Cc: Lee Jones, Rob Herring, Mark Rutland, Liam Girdwood, Mark Brown,
Laxman Dewangan, Mallikarjun Kasoju, Jonathan Hunter, devicetree,
linux-tegra, linux-kernel
25.04.2019 14:22, Thierry Reding пишет:
> On Thu, Apr 25, 2019 at 01:49:00AM +0300, Dmitry Osipenko wrote:
>> Provide system power-off functionality that allows to turn off machine
>> gracefully.
>>
>> Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
>> ---
>> drivers/mfd/max77620.c | 19 +++++++++++++++++++
>> 1 file changed, 19 insertions(+)
>>
>> diff --git a/drivers/mfd/max77620.c b/drivers/mfd/max77620.c
>> index 9b0009c29610..e56223bde568 100644
>> --- a/drivers/mfd/max77620.c
>> +++ b/drivers/mfd/max77620.c
>> @@ -37,6 +37,8 @@
>> #include <linux/regmap.h>
>> #include <linux/slab.h>
>>
>> +static struct max77620_chip *max77620_scratch;
>> +
>> static const struct resource gpio_resources[] = {
>> DEFINE_RES_IRQ(MAX77620_IRQ_TOP_GPIO),
>> };
>> @@ -481,6 +483,15 @@ static int max77620_read_es_version(struct max77620_chip *chip)
>> return ret;
>> }
>>
>> +static void max77620_pm_power_off(void)
>> +{
>> + struct max77620_chip *chip = max77620_scratch;
>> +
>> + regmap_update_bits(chip->rmap, MAX77620_REG_ONOFFCNFG1,
>> + MAX77620_ONOFFCNFG1_SFT_RST,
>> + MAX77620_ONOFFCNFG1_SFT_RST);
>> +}
>
> I think this is only partially correct. See here for a driver that I had
> proposed a while back:
>
> https://github.com/thierryreding/linux/commit/d0eaa77b402f62bd236d76e3edeb3ccf296cbe81
>
> Note that that driver is part of a larger series to move away from all
> the pm_power_off hackery. There was a fair bit of discussion back when I
> proposed the original power off driver for max77620:
>
> https://lkml.org/lkml/2017/1/12/470
>
> I think I may have a more up-to-date local branch of the system-power
> branch from my github repository if you're interested in looking at some
> of that code. There wasn't a whole lot of feedback on the patches, but
> the feedback I did get was generally positive. However, since it didn't
> gain any traction I eventually abandoned that effort. It might be worth
> picking it up again, since, as far as I can tell, the situation around
> power off and restart hasn't changed in the meantime.
Hello Thierry,
Thank you very much for the feedback. IIUC, you're asking for a
comprehensive solution that nobody managed to get upstreamed for years
and thus I think it is absolutely fine to have at least a practical
minimum implemented for the start.
In yours system-power series you are saying that the restart handlers
"lack any means of locking against concurrently registering handlers or
formal definitions on what proper priorities are to order handlers", it
looks to me that it will be much easier to just fix the missing locks
and properly define the priorities.
https://github.com/thierryreding/linux/commit/16e386d4692716c3f2423732a2181fb589421526
In the LKML discussion there is also pointer to the "poweroff handler
call chain" series from 2014 which is similar to the restart handlers
and actually looks nice, sadly it didn't got too far.
https://lkml.org/lkml/2014/10/21/5
I may try to continue the effort of getting proper restart / poweroff
handlers into upstream at some point in the future. Meanwhile there are
much bigger and fun problems to solve in the kernel and user spaces,
let's get everything step by step on by as-needed basis.
^ permalink raw reply [flat|nested] 12+ messages in thread