From: Lubomir Rintel <lkundrak@v3.sk> To: Andy Shevchenko <andy@infradead.org>, Darren Hart <dvhart@infradead.org>, platform-driver-x86@vger.kernel.org, Russell King <linux@armlinux.org.uk> Cc: James Cameron <quozl@laptop.org>, Mark Rutland <mark.rutland@arm.com>, Pavel Machek <pavel@ucw.cz>, Rob Herring <robh+dt@kernel.org>, Sebastian Reichel <sre@kernel.org>, x86@kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, Lubomir Rintel <lkundrak@v3.sk> Subject: [PATCH v4 08/15] Platform: OLPC: add a regulator for the DCON Date: Tue, 8 Jan 2019 18:58:11 +0100 [thread overview] Message-ID: <20190108175818.705110-9-lkundrak@v3.sk> (raw) In-Reply-To: <20190108175818.705110-1-lkundrak@v3.sk> All OLPC ECs are able to turn the power to the DCON on an off. Use the regulator framework to expose the functionality. Signed-off-by: Lubomir Rintel <lkundrak@v3.sk> --- Changes since v1: - Use idiomatic form of return on error - Avoid mixing bool and int drivers/platform/olpc/Kconfig | 1 + drivers/platform/olpc/olpc-ec.c | 67 +++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/drivers/platform/olpc/Kconfig b/drivers/platform/olpc/Kconfig index 066e439bf4fc..02b232c34444 100644 --- a/drivers/platform/olpc/Kconfig +++ b/drivers/platform/olpc/Kconfig @@ -1,4 +1,5 @@ config OLPC_EC + select REGULATOR bool config OLPC_XO175_EC diff --git a/drivers/platform/olpc/olpc-ec.c b/drivers/platform/olpc/olpc-ec.c index 0e1449d7aefc..e9cc95da1548 100644 --- a/drivers/platform/olpc/olpc-ec.c +++ b/drivers/platform/olpc/olpc-ec.c @@ -16,6 +16,7 @@ #include <linux/workqueue.h> #include <linux/init.h> #include <linux/list.h> +#include <linux/regulator/driver.h> #include <linux/olpc-ec.h> struct ec_cmd_desc { @@ -36,6 +37,10 @@ struct olpc_ec_priv { struct work_struct worker; struct mutex cmd_lock; + /* DCON regulator */ + struct regulator_dev *dcon_rdev; + bool dcon_enabled; + /* Pending EC commands */ struct list_head cmd_q; spinlock_t cmd_q_lock; @@ -346,9 +351,61 @@ static struct dentry *olpc_ec_setup_debugfs(void) #endif /* CONFIG_DEBUG_FS */ +static int olpc_ec_set_dcon_power(struct olpc_ec_priv *ec, bool state) +{ + unsigned char ec_byte = state; + int ret; + + if (ec->dcon_enabled == state) + return 0; + + ret = olpc_ec_cmd(EC_DCON_POWER_MODE, &ec_byte, 1, NULL, 0); + if (ret) + return ret; + + ec->dcon_enabled = state; + return 0; +} + +static int dcon_regulator_enable(struct regulator_dev *rdev) +{ + struct olpc_ec_priv *ec = rdev_get_drvdata(rdev); + + return olpc_ec_set_dcon_power(ec, true); +} + +static int dcon_regulator_disable(struct regulator_dev *rdev) +{ + struct olpc_ec_priv *ec = rdev_get_drvdata(rdev); + + return olpc_ec_set_dcon_power(ec, false); +} + +static int dcon_regulator_is_enabled(struct regulator_dev *rdev) +{ + struct olpc_ec_priv *ec = rdev_get_drvdata(rdev); + + return ec->dcon_enabled ? 1 : 0; +} + +static struct regulator_ops dcon_regulator_ops = { + .enable = dcon_regulator_enable, + .disable = dcon_regulator_disable, + .is_enabled = dcon_regulator_is_enabled, +}; + +static const struct regulator_desc dcon_desc = { + .name = "dcon", + .id = 0, + .ops = &dcon_regulator_ops, + .type = REGULATOR_VOLTAGE, + .owner = THIS_MODULE, +}; + static int olpc_ec_probe(struct platform_device *pdev) { struct olpc_ec_priv *ec; + struct regulator_config config = { }; int err; if (!ec_driver) @@ -376,6 +433,16 @@ static int olpc_ec_probe(struct platform_device *pdev) return err; } + config.dev = pdev->dev.parent; + config.driver_data = ec; + ec->dcon_enabled = true; + ec->dcon_rdev = devm_regulator_register(&pdev->dev, &dcon_desc, + &config); + if (IS_ERR(ec->dcon_rdev)) { + dev_err(&pdev->dev, "failed to register DCON regulator\n"); + return PTR_ERR(ec->dcon_rdev); + } + ec->dbgfs_dir = olpc_ec_setup_debugfs(); return err; -- 2.20.1
WARNING: multiple messages have this Message-ID (diff)
From: Lubomir Rintel <lkundrak@v3.sk> To: Andy Shevchenko <andy@infradead.org>, Darren Hart <dvhart@infradead.org>, platform-driver-x86@vger.kernel.org, Russell King <linux@armlinux.org.uk> Cc: Mark Rutland <mark.rutland@arm.com>, devicetree@vger.kernel.org, James Cameron <quozl@laptop.org>, linux-pm@vger.kernel.org, x86@kernel.org, Sebastian Reichel <sre@kernel.org>, linux-kernel@vger.kernel.org, Lubomir Rintel <lkundrak@v3.sk>, Rob Herring <robh+dt@kernel.org>, Pavel Machek <pavel@ucw.cz>, linux-arm-kernel@lists.infradead.org Subject: [PATCH v4 08/15] Platform: OLPC: add a regulator for the DCON Date: Tue, 8 Jan 2019 18:58:11 +0100 [thread overview] Message-ID: <20190108175818.705110-9-lkundrak@v3.sk> (raw) In-Reply-To: <20190108175818.705110-1-lkundrak@v3.sk> All OLPC ECs are able to turn the power to the DCON on an off. Use the regulator framework to expose the functionality. Signed-off-by: Lubomir Rintel <lkundrak@v3.sk> --- Changes since v1: - Use idiomatic form of return on error - Avoid mixing bool and int drivers/platform/olpc/Kconfig | 1 + drivers/platform/olpc/olpc-ec.c | 67 +++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/drivers/platform/olpc/Kconfig b/drivers/platform/olpc/Kconfig index 066e439bf4fc..02b232c34444 100644 --- a/drivers/platform/olpc/Kconfig +++ b/drivers/platform/olpc/Kconfig @@ -1,4 +1,5 @@ config OLPC_EC + select REGULATOR bool config OLPC_XO175_EC diff --git a/drivers/platform/olpc/olpc-ec.c b/drivers/platform/olpc/olpc-ec.c index 0e1449d7aefc..e9cc95da1548 100644 --- a/drivers/platform/olpc/olpc-ec.c +++ b/drivers/platform/olpc/olpc-ec.c @@ -16,6 +16,7 @@ #include <linux/workqueue.h> #include <linux/init.h> #include <linux/list.h> +#include <linux/regulator/driver.h> #include <linux/olpc-ec.h> struct ec_cmd_desc { @@ -36,6 +37,10 @@ struct olpc_ec_priv { struct work_struct worker; struct mutex cmd_lock; + /* DCON regulator */ + struct regulator_dev *dcon_rdev; + bool dcon_enabled; + /* Pending EC commands */ struct list_head cmd_q; spinlock_t cmd_q_lock; @@ -346,9 +351,61 @@ static struct dentry *olpc_ec_setup_debugfs(void) #endif /* CONFIG_DEBUG_FS */ +static int olpc_ec_set_dcon_power(struct olpc_ec_priv *ec, bool state) +{ + unsigned char ec_byte = state; + int ret; + + if (ec->dcon_enabled == state) + return 0; + + ret = olpc_ec_cmd(EC_DCON_POWER_MODE, &ec_byte, 1, NULL, 0); + if (ret) + return ret; + + ec->dcon_enabled = state; + return 0; +} + +static int dcon_regulator_enable(struct regulator_dev *rdev) +{ + struct olpc_ec_priv *ec = rdev_get_drvdata(rdev); + + return olpc_ec_set_dcon_power(ec, true); +} + +static int dcon_regulator_disable(struct regulator_dev *rdev) +{ + struct olpc_ec_priv *ec = rdev_get_drvdata(rdev); + + return olpc_ec_set_dcon_power(ec, false); +} + +static int dcon_regulator_is_enabled(struct regulator_dev *rdev) +{ + struct olpc_ec_priv *ec = rdev_get_drvdata(rdev); + + return ec->dcon_enabled ? 1 : 0; +} + +static struct regulator_ops dcon_regulator_ops = { + .enable = dcon_regulator_enable, + .disable = dcon_regulator_disable, + .is_enabled = dcon_regulator_is_enabled, +}; + +static const struct regulator_desc dcon_desc = { + .name = "dcon", + .id = 0, + .ops = &dcon_regulator_ops, + .type = REGULATOR_VOLTAGE, + .owner = THIS_MODULE, +}; + static int olpc_ec_probe(struct platform_device *pdev) { struct olpc_ec_priv *ec; + struct regulator_config config = { }; int err; if (!ec_driver) @@ -376,6 +433,16 @@ static int olpc_ec_probe(struct platform_device *pdev) return err; } + config.dev = pdev->dev.parent; + config.driver_data = ec; + ec->dcon_enabled = true; + ec->dcon_rdev = devm_regulator_register(&pdev->dev, &dcon_desc, + &config); + if (IS_ERR(ec->dcon_rdev)) { + dev_err(&pdev->dev, "failed to register DCON regulator\n"); + return PTR_ERR(ec->dcon_rdev); + } + ec->dbgfs_dir = olpc_ec_setup_debugfs(); return err; -- 2.20.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2019-01-08 18:00 UTC|newest] Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-01-08 17:58 [PATCH v4 00/15] Add support for OLPC XO 1.75 Embedded Controller Lubomir Rintel 2019-01-08 17:58 ` Lubomir Rintel 2019-01-08 17:58 ` [PATCH v4 01/15] ARM: export arm_pm_restart() Lubomir Rintel 2019-01-08 17:58 ` Lubomir Rintel 2019-01-08 23:31 ` Russell King - ARM Linux 2019-01-08 23:31 ` Russell King - ARM Linux 2019-01-09 7:24 ` Lubomir Rintel 2019-01-09 7:24 ` Lubomir Rintel 2019-01-08 17:58 ` [PATCH v4 02/15] dt-bindings: olpc,xo1.75-ec: Add OLPC XO-1.75 EC bindings Lubomir Rintel 2019-01-08 17:58 ` [PATCH v4 02/15] dt-bindings: olpc, xo1.75-ec: " Lubomir Rintel 2019-01-08 17:58 ` Lubomir Rintel 2019-01-08 17:58 ` [PATCH v4 03/15] Platform: OLPC: Remove an unused include Lubomir Rintel 2019-01-08 17:58 ` Lubomir Rintel 2019-01-08 17:58 ` Lubomir Rintel 2019-01-08 17:58 ` [PATCH v4 04/15] Platform: OLPC: Add XO-1.75 EC driver Lubomir Rintel 2019-01-08 17:58 ` Lubomir Rintel 2019-01-08 17:58 ` [PATCH v4 05/15] Platform: OLPC: Avoid a warning if the EC didn't register yet Lubomir Rintel 2019-01-08 17:58 ` Lubomir Rintel 2019-01-08 17:58 ` [PATCH v4 06/15] Platform: OLPC: Move EC-specific functionality out from x86 Lubomir Rintel 2019-01-08 17:58 ` Lubomir Rintel 2019-01-09 11:23 ` Andy Shevchenko 2019-01-09 11:23 ` Andy Shevchenko 2019-01-10 17:12 ` Lubomir Rintel 2019-01-10 17:12 ` Lubomir Rintel 2019-01-08 17:58 ` [PATCH v4 07/15] Platform: OLPC: Use BIT() and GENMASK() for event masks Lubomir Rintel 2019-01-08 17:58 ` Lubomir Rintel 2019-01-09 11:14 ` Andy Shevchenko 2019-01-09 11:14 ` Andy Shevchenko 2019-01-09 11:14 ` Andy Shevchenko 2019-01-08 17:58 ` Lubomir Rintel [this message] 2019-01-08 17:58 ` [PATCH v4 08/15] Platform: OLPC: add a regulator for the DCON Lubomir Rintel 2019-01-08 17:58 ` [PATCH v4 09/15] dt-bindings: olpc_battery: Add XO-1.5 battery Lubomir Rintel 2019-01-08 17:58 ` Lubomir Rintel 2019-01-08 17:58 ` [PATCH v4 10/15] x86, olpc: Use a correct version when making up a battery node Lubomir Rintel 2019-01-08 17:58 ` Lubomir Rintel 2019-01-08 17:58 ` [PATCH v4 11/15] power: supply: olpc_battery: Use DT to get battery version Lubomir Rintel 2019-01-08 17:58 ` Lubomir Rintel 2019-01-08 17:58 ` [PATCH v4 12/15] power: supply: olpc_battery: Move priv data to a struct Lubomir Rintel 2019-01-08 17:58 ` Lubomir Rintel 2019-01-08 17:58 ` [PATCH v4 13/15] power: supply: olpc_battery: Use devm_power_supply_register() Lubomir Rintel 2019-01-08 17:58 ` Lubomir Rintel 2019-01-08 17:58 ` [PATCH v4 14/15] power: supply: olpc_battery: Avoid using platform_info Lubomir Rintel 2019-01-08 17:58 ` Lubomir Rintel 2019-01-08 17:58 ` [PATCH v4 15/15] power: supply: olpc_battery: Add OLPC XO 1.75 support Lubomir Rintel 2019-01-08 17:58 ` Lubomir Rintel 2019-01-09 11:15 ` [PATCH v4 00/15] Add support for OLPC XO 1.75 Embedded Controller Andy Shevchenko 2019-01-09 11:15 ` Andy Shevchenko 2019-01-09 16:37 ` Lubomir Rintel 2019-01-09 16:37 ` Lubomir Rintel 2019-01-10 10:08 ` Andy Shevchenko 2019-01-10 10:08 ` Andy Shevchenko
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190108175818.705110-9-lkundrak@v3.sk \ --to=lkundrak@v3.sk \ --cc=andy@infradead.org \ --cc=devicetree@vger.kernel.org \ --cc=dvhart@infradead.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-pm@vger.kernel.org \ --cc=linux@armlinux.org.uk \ --cc=mark.rutland@arm.com \ --cc=pavel@ucw.cz \ --cc=platform-driver-x86@vger.kernel.org \ --cc=quozl@laptop.org \ --cc=robh+dt@kernel.org \ --cc=sre@kernel.org \ --cc=x86@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.