Skip to content

Commit

Permalink
sysreset: implement MAX77663 sysreset functions
Browse files Browse the repository at this point in the history
MAX77663 PMIC has embedded poweroff function used by some
device to initiane device power off. Implement it as sysreset
driver.

Signed-off-by: Svyatoslav Ryhel <[email protected]>
  • Loading branch information
clamor-s committed Oct 3, 2023
1 parent bcc91af commit dea8f80
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 1 deletion.
12 changes: 11 additions & 1 deletion drivers/power/pmic/max77663.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <dm.h>
#include <i2c.h>
#include <log.h>
#include <dm/lists.h>
#include <power/pmic.h>
#include <power/regulator.h>
#include <power/max77663.h>
Expand Down Expand Up @@ -49,7 +50,16 @@ static int max77663_read(struct udevice *dev, uint reg, uint8_t *buff, int len)
static int max77663_bind(struct udevice *dev)
{
ofnode regulators_node;
int children;
int children, ret;

if (IS_ENABLED(CONFIG_SYSRESET_MAX77663)) {
ret = device_bind_driver(dev, MAX77663_RST_DRIVER,
"sysreset", NULL);
if (ret) {
log_err("cannot bind SYSRESET (ret = %d)\n", ret);
return ret;
}
}

regulators_node = dev_read_subnode(dev, "regulators");
if (!ofnode_valid(regulators_node)) {
Expand Down
7 changes: 7 additions & 0 deletions drivers/sysreset/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,13 @@ config SYSRESET_GPIO
example on Microblaze where reset logic can be controlled via GPIO
pin which triggers cpu reset.

config SYSRESET_MAX77663
bool "Enable support for MAX77663 PMIC System Reset"
depends on DM_PMIC_MAX77663
select SYSRESET_CMD_POWEROFF if CMD_POWEROFF
help
Enable system power management functions found in MAX77663 PMIC.

config SYSRESET_MICROBLAZE
bool "Enable support for Microblaze soft reset"
depends on MICROBLAZE
Expand Down
1 change: 1 addition & 0 deletions drivers/sysreset/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ obj-$(CONFIG_ARCH_STI) += sysreset_sti.o
obj-$(CONFIG_SANDBOX) += sysreset_sandbox.o
obj-$(CONFIG_POWEROFF_GPIO) += poweroff_gpio.o
obj-$(CONFIG_SYSRESET_GPIO) += sysreset_gpio.o
obj-$(CONFIG_$(SPL_TPL_)SYSRESET_MAX77663) += sysreset_max77663.o
obj-$(CONFIG_SYSRESET_MPC83XX) += sysreset_mpc83xx.o
obj-$(CONFIG_SYSRESET_MICROBLAZE) += sysreset_microblaze.o
obj-$(CONFIG_SYSRESET_OCTEON) += sysreset_octeon.o
Expand Down
53 changes: 53 additions & 0 deletions drivers/sysreset/sysreset_max77663.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright(C) 2023 Svyatoslav Ryhel <[email protected]>
*/

#include <common.h>
#include <dm.h>
#include <i2c.h>
#include <errno.h>
#include <sysreset.h>
#include <power/pmic.h>
#include <power/max77663.h>

static int max77663_sysreset_request(struct udevice *dev,
enum sysreset_t type)
{
int val;

val = pmic_reg_read(dev->parent, MAX77663_REG_ONOFF_CFG1);
if (val < 0)
return val;

/* clear both bits */
val &= ~ONOFF_SFT_RST;
val &= ~ONOFF_PWR_OFF;

switch (type) {
case SYSRESET_POWER:
/* MAX77663: SFT_RST > ONOFF_CFG1 */
pmic_reg_write(dev->parent, MAX77663_REG_ONOFF_CFG1,
val | ONOFF_SFT_RST);
break;
case SYSRESET_POWER_OFF:
/* MAX77663: PWR_OFF > ONOFF_CFG1 */
pmic_reg_write(dev->parent, MAX77663_REG_ONOFF_CFG1,
val | ONOFF_PWR_OFF);
break;
default:
return -EPROTONOSUPPORT;
}

return -EINPROGRESS;
}

static struct sysreset_ops max77663_sysreset = {
.request = max77663_sysreset_request,
};

U_BOOT_DRIVER(sysreset_max77663) = {
.id = UCLASS_SYSRESET,
.name = MAX77663_RST_DRIVER,
.ops = &max77663_sysreset,
};
5 changes: 5 additions & 0 deletions include/power/max77663.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
/* Drivers name */
#define MAX77663_LDO_DRIVER "max77663_ldo"
#define MAX77663_SD_DRIVER "max77663_sd"
#define MAX77663_RST_DRIVER "max77663_rst"

/* Step-Down (SD) Regulator calculations */
#define SD_STATUS_MASK 0x30
Expand Down Expand Up @@ -39,4 +40,8 @@

#define LDO_VOLT_BASE 800000

#define MAX77663_REG_ONOFF_CFG1 0x41
#define ONOFF_SFT_RST BIT(7)
#define ONOFF_PWR_OFF BIT(1)

#endif /* _MAX77663_H_ */

0 comments on commit dea8f80

Please sign in to comment.