162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * MFD core driver for the X-Powers' Power Management ICs 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * AXP20x typically comprises an adaptive USB-Compatible PWM charger, BUCK DC-DC 662306a36Sopenharmony_ci * converters, LDOs, multiple 12-bit ADCs of voltage, current and temperature 762306a36Sopenharmony_ci * as well as configurable GPIOs. 862306a36Sopenharmony_ci * 962306a36Sopenharmony_ci * This file contains the interface independent core functions. 1062306a36Sopenharmony_ci * 1162306a36Sopenharmony_ci * Copyright (C) 2014 Carlo Caione 1262306a36Sopenharmony_ci * 1362306a36Sopenharmony_ci * Author: Carlo Caione <carlo@caione.org> 1462306a36Sopenharmony_ci */ 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#include <linux/acpi.h> 1762306a36Sopenharmony_ci#include <linux/bitops.h> 1862306a36Sopenharmony_ci#include <linux/delay.h> 1962306a36Sopenharmony_ci#include <linux/err.h> 2062306a36Sopenharmony_ci#include <linux/interrupt.h> 2162306a36Sopenharmony_ci#include <linux/kernel.h> 2262306a36Sopenharmony_ci#include <linux/mfd/axp20x.h> 2362306a36Sopenharmony_ci#include <linux/mfd/core.h> 2462306a36Sopenharmony_ci#include <linux/module.h> 2562306a36Sopenharmony_ci#include <linux/of_device.h> 2662306a36Sopenharmony_ci#include <linux/reboot.h> 2762306a36Sopenharmony_ci#include <linux/regmap.h> 2862306a36Sopenharmony_ci#include <linux/regulator/consumer.h> 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci#define AXP20X_OFF BIT(7) 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci#define AXP806_REG_ADDR_EXT_ADDR_MASTER_MODE 0 3362306a36Sopenharmony_ci#define AXP806_REG_ADDR_EXT_ADDR_SLAVE_MODE BIT(4) 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_cistatic const char * const axp20x_model_names[] = { 3662306a36Sopenharmony_ci "AXP152", 3762306a36Sopenharmony_ci "AXP192", 3862306a36Sopenharmony_ci "AXP202", 3962306a36Sopenharmony_ci "AXP209", 4062306a36Sopenharmony_ci "AXP221", 4162306a36Sopenharmony_ci "AXP223", 4262306a36Sopenharmony_ci "AXP288", 4362306a36Sopenharmony_ci "AXP313a", 4462306a36Sopenharmony_ci "AXP803", 4562306a36Sopenharmony_ci "AXP806", 4662306a36Sopenharmony_ci "AXP809", 4762306a36Sopenharmony_ci "AXP813", 4862306a36Sopenharmony_ci "AXP15060", 4962306a36Sopenharmony_ci}; 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_cistatic const struct regmap_range axp152_writeable_ranges[] = { 5262306a36Sopenharmony_ci regmap_reg_range(AXP152_LDO3456_DC1234_CTRL, AXP152_IRQ3_STATE), 5362306a36Sopenharmony_ci regmap_reg_range(AXP152_DCDC_MODE, AXP152_PWM1_DUTY_CYCLE), 5462306a36Sopenharmony_ci}; 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_cistatic const struct regmap_range axp152_volatile_ranges[] = { 5762306a36Sopenharmony_ci regmap_reg_range(AXP152_PWR_OP_MODE, AXP152_PWR_OP_MODE), 5862306a36Sopenharmony_ci regmap_reg_range(AXP152_IRQ1_EN, AXP152_IRQ3_STATE), 5962306a36Sopenharmony_ci regmap_reg_range(AXP152_GPIO_INPUT, AXP152_GPIO_INPUT), 6062306a36Sopenharmony_ci}; 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_cistatic const struct regmap_access_table axp152_writeable_table = { 6362306a36Sopenharmony_ci .yes_ranges = axp152_writeable_ranges, 6462306a36Sopenharmony_ci .n_yes_ranges = ARRAY_SIZE(axp152_writeable_ranges), 6562306a36Sopenharmony_ci}; 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_cistatic const struct regmap_access_table axp152_volatile_table = { 6862306a36Sopenharmony_ci .yes_ranges = axp152_volatile_ranges, 6962306a36Sopenharmony_ci .n_yes_ranges = ARRAY_SIZE(axp152_volatile_ranges), 7062306a36Sopenharmony_ci}; 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_cistatic const struct regmap_range axp20x_writeable_ranges[] = { 7362306a36Sopenharmony_ci regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ5_STATE), 7462306a36Sopenharmony_ci regmap_reg_range(AXP20X_CHRG_CTRL1, AXP20X_CHRG_CTRL2), 7562306a36Sopenharmony_ci regmap_reg_range(AXP20X_DCDC_MODE, AXP20X_FG_RES), 7662306a36Sopenharmony_ci regmap_reg_range(AXP20X_RDC_H, AXP20X_OCV(AXP20X_OCV_MAX)), 7762306a36Sopenharmony_ci}; 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_cistatic const struct regmap_range axp20x_volatile_ranges[] = { 8062306a36Sopenharmony_ci regmap_reg_range(AXP20X_PWR_INPUT_STATUS, AXP20X_USB_OTG_STATUS), 8162306a36Sopenharmony_ci regmap_reg_range(AXP20X_CHRG_CTRL1, AXP20X_CHRG_CTRL2), 8262306a36Sopenharmony_ci regmap_reg_range(AXP20X_IRQ1_EN, AXP20X_IRQ5_STATE), 8362306a36Sopenharmony_ci regmap_reg_range(AXP20X_ACIN_V_ADC_H, AXP20X_IPSOUT_V_HIGH_L), 8462306a36Sopenharmony_ci regmap_reg_range(AXP20X_GPIO20_SS, AXP20X_GPIO3_CTRL), 8562306a36Sopenharmony_ci regmap_reg_range(AXP20X_FG_RES, AXP20X_RDC_L), 8662306a36Sopenharmony_ci}; 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_cistatic const struct regmap_access_table axp20x_writeable_table = { 8962306a36Sopenharmony_ci .yes_ranges = axp20x_writeable_ranges, 9062306a36Sopenharmony_ci .n_yes_ranges = ARRAY_SIZE(axp20x_writeable_ranges), 9162306a36Sopenharmony_ci}; 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_cistatic const struct regmap_access_table axp20x_volatile_table = { 9462306a36Sopenharmony_ci .yes_ranges = axp20x_volatile_ranges, 9562306a36Sopenharmony_ci .n_yes_ranges = ARRAY_SIZE(axp20x_volatile_ranges), 9662306a36Sopenharmony_ci}; 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_cistatic const struct regmap_range axp192_writeable_ranges[] = { 9962306a36Sopenharmony_ci regmap_reg_range(AXP192_DATACACHE(0), AXP192_DATACACHE(5)), 10062306a36Sopenharmony_ci regmap_reg_range(AXP192_PWR_OUT_CTRL, AXP192_IRQ5_STATE), 10162306a36Sopenharmony_ci regmap_reg_range(AXP20X_DCDC_MODE, AXP192_N_RSTO_CTRL), 10262306a36Sopenharmony_ci regmap_reg_range(AXP20X_CC_CTRL, AXP20X_CC_CTRL), 10362306a36Sopenharmony_ci}; 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_cistatic const struct regmap_range axp192_volatile_ranges[] = { 10662306a36Sopenharmony_ci regmap_reg_range(AXP20X_PWR_INPUT_STATUS, AXP192_USB_OTG_STATUS), 10762306a36Sopenharmony_ci regmap_reg_range(AXP192_IRQ1_STATE, AXP192_IRQ4_STATE), 10862306a36Sopenharmony_ci regmap_reg_range(AXP192_IRQ5_STATE, AXP192_IRQ5_STATE), 10962306a36Sopenharmony_ci regmap_reg_range(AXP20X_ACIN_V_ADC_H, AXP20X_IPSOUT_V_HIGH_L), 11062306a36Sopenharmony_ci regmap_reg_range(AXP20X_TIMER_CTRL, AXP20X_TIMER_CTRL), 11162306a36Sopenharmony_ci regmap_reg_range(AXP192_GPIO2_0_STATE, AXP192_GPIO2_0_STATE), 11262306a36Sopenharmony_ci regmap_reg_range(AXP192_GPIO4_3_STATE, AXP192_GPIO4_3_STATE), 11362306a36Sopenharmony_ci regmap_reg_range(AXP192_N_RSTO_CTRL, AXP192_N_RSTO_CTRL), 11462306a36Sopenharmony_ci regmap_reg_range(AXP20X_CHRG_CC_31_24, AXP20X_CC_CTRL), 11562306a36Sopenharmony_ci}; 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_cistatic const struct regmap_access_table axp192_writeable_table = { 11862306a36Sopenharmony_ci .yes_ranges = axp192_writeable_ranges, 11962306a36Sopenharmony_ci .n_yes_ranges = ARRAY_SIZE(axp192_writeable_ranges), 12062306a36Sopenharmony_ci}; 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_cistatic const struct regmap_access_table axp192_volatile_table = { 12362306a36Sopenharmony_ci .yes_ranges = axp192_volatile_ranges, 12462306a36Sopenharmony_ci .n_yes_ranges = ARRAY_SIZE(axp192_volatile_ranges), 12562306a36Sopenharmony_ci}; 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ci/* AXP22x ranges are shared with the AXP809, as they cover the same range */ 12862306a36Sopenharmony_cistatic const struct regmap_range axp22x_writeable_ranges[] = { 12962306a36Sopenharmony_ci regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ5_STATE), 13062306a36Sopenharmony_ci regmap_reg_range(AXP20X_CHRG_CTRL1, AXP22X_CHRG_CTRL3), 13162306a36Sopenharmony_ci regmap_reg_range(AXP20X_DCDC_MODE, AXP22X_BATLOW_THRES1), 13262306a36Sopenharmony_ci}; 13362306a36Sopenharmony_ci 13462306a36Sopenharmony_cistatic const struct regmap_range axp22x_volatile_ranges[] = { 13562306a36Sopenharmony_ci regmap_reg_range(AXP20X_PWR_INPUT_STATUS, AXP20X_PWR_OP_MODE), 13662306a36Sopenharmony_ci regmap_reg_range(AXP20X_IRQ1_EN, AXP20X_IRQ5_STATE), 13762306a36Sopenharmony_ci regmap_reg_range(AXP22X_GPIO_STATE, AXP22X_GPIO_STATE), 13862306a36Sopenharmony_ci regmap_reg_range(AXP22X_PMIC_TEMP_H, AXP20X_IPSOUT_V_HIGH_L), 13962306a36Sopenharmony_ci regmap_reg_range(AXP20X_FG_RES, AXP20X_FG_RES), 14062306a36Sopenharmony_ci}; 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_cistatic const struct regmap_access_table axp22x_writeable_table = { 14362306a36Sopenharmony_ci .yes_ranges = axp22x_writeable_ranges, 14462306a36Sopenharmony_ci .n_yes_ranges = ARRAY_SIZE(axp22x_writeable_ranges), 14562306a36Sopenharmony_ci}; 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_cistatic const struct regmap_access_table axp22x_volatile_table = { 14862306a36Sopenharmony_ci .yes_ranges = axp22x_volatile_ranges, 14962306a36Sopenharmony_ci .n_yes_ranges = ARRAY_SIZE(axp22x_volatile_ranges), 15062306a36Sopenharmony_ci}; 15162306a36Sopenharmony_ci 15262306a36Sopenharmony_ci/* AXP288 ranges are shared with the AXP803, as they cover the same range */ 15362306a36Sopenharmony_cistatic const struct regmap_range axp288_writeable_ranges[] = { 15462306a36Sopenharmony_ci regmap_reg_range(AXP288_POWER_REASON, AXP288_POWER_REASON), 15562306a36Sopenharmony_ci regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ6_STATE), 15662306a36Sopenharmony_ci regmap_reg_range(AXP20X_DCDC_MODE, AXP288_FG_TUNE5), 15762306a36Sopenharmony_ci}; 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_cistatic const struct regmap_range axp288_volatile_ranges[] = { 16062306a36Sopenharmony_ci regmap_reg_range(AXP20X_PWR_INPUT_STATUS, AXP288_POWER_REASON), 16162306a36Sopenharmony_ci regmap_reg_range(AXP22X_PWR_OUT_CTRL1, AXP22X_ALDO3_V_OUT), 16262306a36Sopenharmony_ci regmap_reg_range(AXP288_BC_GLOBAL, AXP288_BC_GLOBAL), 16362306a36Sopenharmony_ci regmap_reg_range(AXP288_BC_DET_STAT, AXP20X_VBUS_IPSOUT_MGMT), 16462306a36Sopenharmony_ci regmap_reg_range(AXP20X_CHRG_BAK_CTRL, AXP20X_CHRG_BAK_CTRL), 16562306a36Sopenharmony_ci regmap_reg_range(AXP20X_IRQ1_EN, AXP20X_IPSOUT_V_HIGH_L), 16662306a36Sopenharmony_ci regmap_reg_range(AXP20X_TIMER_CTRL, AXP20X_TIMER_CTRL), 16762306a36Sopenharmony_ci regmap_reg_range(AXP20X_GPIO1_CTRL, AXP22X_GPIO_STATE), 16862306a36Sopenharmony_ci regmap_reg_range(AXP288_RT_BATT_V_H, AXP288_RT_BATT_V_L), 16962306a36Sopenharmony_ci regmap_reg_range(AXP20X_FG_RES, AXP288_FG_CC_CAP_REG), 17062306a36Sopenharmony_ci}; 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_cistatic const struct regmap_access_table axp288_writeable_table = { 17362306a36Sopenharmony_ci .yes_ranges = axp288_writeable_ranges, 17462306a36Sopenharmony_ci .n_yes_ranges = ARRAY_SIZE(axp288_writeable_ranges), 17562306a36Sopenharmony_ci}; 17662306a36Sopenharmony_ci 17762306a36Sopenharmony_cistatic const struct regmap_access_table axp288_volatile_table = { 17862306a36Sopenharmony_ci .yes_ranges = axp288_volatile_ranges, 17962306a36Sopenharmony_ci .n_yes_ranges = ARRAY_SIZE(axp288_volatile_ranges), 18062306a36Sopenharmony_ci}; 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_cistatic const struct regmap_range axp806_writeable_ranges[] = { 18362306a36Sopenharmony_ci regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_DATACACHE(3)), 18462306a36Sopenharmony_ci regmap_reg_range(AXP806_PWR_OUT_CTRL1, AXP806_CLDO3_V_CTRL), 18562306a36Sopenharmony_ci regmap_reg_range(AXP20X_IRQ1_EN, AXP20X_IRQ2_EN), 18662306a36Sopenharmony_ci regmap_reg_range(AXP20X_IRQ1_STATE, AXP20X_IRQ2_STATE), 18762306a36Sopenharmony_ci regmap_reg_range(AXP806_REG_ADDR_EXT, AXP806_REG_ADDR_EXT), 18862306a36Sopenharmony_ci}; 18962306a36Sopenharmony_ci 19062306a36Sopenharmony_cistatic const struct regmap_range axp313a_writeable_ranges[] = { 19162306a36Sopenharmony_ci regmap_reg_range(AXP313A_ON_INDICATE, AXP313A_IRQ_STATE), 19262306a36Sopenharmony_ci}; 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_cistatic const struct regmap_range axp313a_volatile_ranges[] = { 19562306a36Sopenharmony_ci regmap_reg_range(AXP313A_SHUTDOWN_CTRL, AXP313A_SHUTDOWN_CTRL), 19662306a36Sopenharmony_ci regmap_reg_range(AXP313A_IRQ_STATE, AXP313A_IRQ_STATE), 19762306a36Sopenharmony_ci}; 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_cistatic const struct regmap_access_table axp313a_writeable_table = { 20062306a36Sopenharmony_ci .yes_ranges = axp313a_writeable_ranges, 20162306a36Sopenharmony_ci .n_yes_ranges = ARRAY_SIZE(axp313a_writeable_ranges), 20262306a36Sopenharmony_ci}; 20362306a36Sopenharmony_ci 20462306a36Sopenharmony_cistatic const struct regmap_access_table axp313a_volatile_table = { 20562306a36Sopenharmony_ci .yes_ranges = axp313a_volatile_ranges, 20662306a36Sopenharmony_ci .n_yes_ranges = ARRAY_SIZE(axp313a_volatile_ranges), 20762306a36Sopenharmony_ci}; 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_cistatic const struct regmap_range axp806_volatile_ranges[] = { 21062306a36Sopenharmony_ci regmap_reg_range(AXP20X_IRQ1_STATE, AXP20X_IRQ2_STATE), 21162306a36Sopenharmony_ci}; 21262306a36Sopenharmony_ci 21362306a36Sopenharmony_cistatic const struct regmap_access_table axp806_writeable_table = { 21462306a36Sopenharmony_ci .yes_ranges = axp806_writeable_ranges, 21562306a36Sopenharmony_ci .n_yes_ranges = ARRAY_SIZE(axp806_writeable_ranges), 21662306a36Sopenharmony_ci}; 21762306a36Sopenharmony_ci 21862306a36Sopenharmony_cistatic const struct regmap_access_table axp806_volatile_table = { 21962306a36Sopenharmony_ci .yes_ranges = axp806_volatile_ranges, 22062306a36Sopenharmony_ci .n_yes_ranges = ARRAY_SIZE(axp806_volatile_ranges), 22162306a36Sopenharmony_ci}; 22262306a36Sopenharmony_ci 22362306a36Sopenharmony_cistatic const struct regmap_range axp15060_writeable_ranges[] = { 22462306a36Sopenharmony_ci regmap_reg_range(AXP15060_PWR_OUT_CTRL1, AXP15060_DCDC_MODE_CTRL2), 22562306a36Sopenharmony_ci regmap_reg_range(AXP15060_OUTPUT_MONITOR_DISCHARGE, AXP15060_CPUSLDO_V_CTRL), 22662306a36Sopenharmony_ci regmap_reg_range(AXP15060_PWR_WAKEUP_CTRL, AXP15060_PWR_DISABLE_DOWN_SEQ), 22762306a36Sopenharmony_ci regmap_reg_range(AXP15060_PEK_KEY, AXP15060_PEK_KEY), 22862306a36Sopenharmony_ci regmap_reg_range(AXP15060_IRQ1_EN, AXP15060_IRQ2_EN), 22962306a36Sopenharmony_ci regmap_reg_range(AXP15060_IRQ1_STATE, AXP15060_IRQ2_STATE), 23062306a36Sopenharmony_ci}; 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_cistatic const struct regmap_range axp15060_volatile_ranges[] = { 23362306a36Sopenharmony_ci regmap_reg_range(AXP15060_STARTUP_SRC, AXP15060_STARTUP_SRC), 23462306a36Sopenharmony_ci regmap_reg_range(AXP15060_PWR_WAKEUP_CTRL, AXP15060_PWR_DISABLE_DOWN_SEQ), 23562306a36Sopenharmony_ci regmap_reg_range(AXP15060_IRQ1_STATE, AXP15060_IRQ2_STATE), 23662306a36Sopenharmony_ci}; 23762306a36Sopenharmony_ci 23862306a36Sopenharmony_cistatic const struct regmap_access_table axp15060_writeable_table = { 23962306a36Sopenharmony_ci .yes_ranges = axp15060_writeable_ranges, 24062306a36Sopenharmony_ci .n_yes_ranges = ARRAY_SIZE(axp15060_writeable_ranges), 24162306a36Sopenharmony_ci}; 24262306a36Sopenharmony_ci 24362306a36Sopenharmony_cistatic const struct regmap_access_table axp15060_volatile_table = { 24462306a36Sopenharmony_ci .yes_ranges = axp15060_volatile_ranges, 24562306a36Sopenharmony_ci .n_yes_ranges = ARRAY_SIZE(axp15060_volatile_ranges), 24662306a36Sopenharmony_ci}; 24762306a36Sopenharmony_ci 24862306a36Sopenharmony_cistatic const struct resource axp152_pek_resources[] = { 24962306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP152_IRQ_PEK_RIS_EDGE, "PEK_DBR"), 25062306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP152_IRQ_PEK_FAL_EDGE, "PEK_DBF"), 25162306a36Sopenharmony_ci}; 25262306a36Sopenharmony_ci 25362306a36Sopenharmony_cistatic const struct resource axp192_ac_power_supply_resources[] = { 25462306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP192_IRQ_ACIN_PLUGIN, "ACIN_PLUGIN"), 25562306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP192_IRQ_ACIN_REMOVAL, "ACIN_REMOVAL"), 25662306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP192_IRQ_ACIN_OVER_V, "ACIN_OVER_V"), 25762306a36Sopenharmony_ci}; 25862306a36Sopenharmony_ci 25962306a36Sopenharmony_cistatic const struct resource axp192_usb_power_supply_resources[] = { 26062306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP192_IRQ_VBUS_PLUGIN, "VBUS_PLUGIN"), 26162306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP192_IRQ_VBUS_REMOVAL, "VBUS_REMOVAL"), 26262306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP192_IRQ_VBUS_VALID, "VBUS_VALID"), 26362306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP192_IRQ_VBUS_NOT_VALID, "VBUS_NOT_VALID"), 26462306a36Sopenharmony_ci}; 26562306a36Sopenharmony_ci 26662306a36Sopenharmony_cistatic const struct resource axp20x_ac_power_supply_resources[] = { 26762306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP20X_IRQ_ACIN_PLUGIN, "ACIN_PLUGIN"), 26862306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP20X_IRQ_ACIN_REMOVAL, "ACIN_REMOVAL"), 26962306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP20X_IRQ_ACIN_OVER_V, "ACIN_OVER_V"), 27062306a36Sopenharmony_ci}; 27162306a36Sopenharmony_ci 27262306a36Sopenharmony_cistatic const struct resource axp20x_pek_resources[] = { 27362306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP20X_IRQ_PEK_RIS_EDGE, "PEK_DBR"), 27462306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP20X_IRQ_PEK_FAL_EDGE, "PEK_DBF"), 27562306a36Sopenharmony_ci}; 27662306a36Sopenharmony_ci 27762306a36Sopenharmony_cistatic const struct resource axp20x_usb_power_supply_resources[] = { 27862306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP20X_IRQ_VBUS_PLUGIN, "VBUS_PLUGIN"), 27962306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP20X_IRQ_VBUS_REMOVAL, "VBUS_REMOVAL"), 28062306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP20X_IRQ_VBUS_VALID, "VBUS_VALID"), 28162306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP20X_IRQ_VBUS_NOT_VALID, "VBUS_NOT_VALID"), 28262306a36Sopenharmony_ci}; 28362306a36Sopenharmony_ci 28462306a36Sopenharmony_cistatic const struct resource axp22x_usb_power_supply_resources[] = { 28562306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP22X_IRQ_VBUS_PLUGIN, "VBUS_PLUGIN"), 28662306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP22X_IRQ_VBUS_REMOVAL, "VBUS_REMOVAL"), 28762306a36Sopenharmony_ci}; 28862306a36Sopenharmony_ci 28962306a36Sopenharmony_ci/* AXP803 and AXP813/AXP818 share the same interrupts */ 29062306a36Sopenharmony_cistatic const struct resource axp803_usb_power_supply_resources[] = { 29162306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP803_IRQ_VBUS_PLUGIN, "VBUS_PLUGIN"), 29262306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP803_IRQ_VBUS_REMOVAL, "VBUS_REMOVAL"), 29362306a36Sopenharmony_ci}; 29462306a36Sopenharmony_ci 29562306a36Sopenharmony_cistatic const struct resource axp22x_pek_resources[] = { 29662306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP22X_IRQ_PEK_RIS_EDGE, "PEK_DBR"), 29762306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP22X_IRQ_PEK_FAL_EDGE, "PEK_DBF"), 29862306a36Sopenharmony_ci}; 29962306a36Sopenharmony_ci 30062306a36Sopenharmony_cistatic const struct resource axp288_power_button_resources[] = { 30162306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP288_IRQ_POKP, "PEK_DBR"), 30262306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP288_IRQ_POKN, "PEK_DBF"), 30362306a36Sopenharmony_ci}; 30462306a36Sopenharmony_ci 30562306a36Sopenharmony_cistatic const struct resource axp288_fuel_gauge_resources[] = { 30662306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_QWBTU), 30762306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_WBTU), 30862306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_QWBTO), 30962306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_WBTO), 31062306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_WL2), 31162306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_WL1), 31262306a36Sopenharmony_ci}; 31362306a36Sopenharmony_ci 31462306a36Sopenharmony_cistatic const struct resource axp313a_pek_resources[] = { 31562306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP313A_IRQ_PEK_RIS_EDGE, "PEK_DBR"), 31662306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP313A_IRQ_PEK_FAL_EDGE, "PEK_DBF"), 31762306a36Sopenharmony_ci}; 31862306a36Sopenharmony_ci 31962306a36Sopenharmony_cistatic const struct resource axp803_pek_resources[] = { 32062306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP803_IRQ_PEK_RIS_EDGE, "PEK_DBR"), 32162306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP803_IRQ_PEK_FAL_EDGE, "PEK_DBF"), 32262306a36Sopenharmony_ci}; 32362306a36Sopenharmony_ci 32462306a36Sopenharmony_cistatic const struct resource axp806_pek_resources[] = { 32562306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP806_IRQ_POK_RISE, "PEK_DBR"), 32662306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP806_IRQ_POK_FALL, "PEK_DBF"), 32762306a36Sopenharmony_ci}; 32862306a36Sopenharmony_ci 32962306a36Sopenharmony_cistatic const struct resource axp809_pek_resources[] = { 33062306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP809_IRQ_PEK_RIS_EDGE, "PEK_DBR"), 33162306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP809_IRQ_PEK_FAL_EDGE, "PEK_DBF"), 33262306a36Sopenharmony_ci}; 33362306a36Sopenharmony_ci 33462306a36Sopenharmony_cistatic const struct resource axp15060_pek_resources[] = { 33562306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP15060_IRQ_PEK_RIS_EDGE, "PEK_DBR"), 33662306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP15060_IRQ_PEK_FAL_EDGE, "PEK_DBF"), 33762306a36Sopenharmony_ci}; 33862306a36Sopenharmony_ci 33962306a36Sopenharmony_cistatic const struct regmap_config axp152_regmap_config = { 34062306a36Sopenharmony_ci .reg_bits = 8, 34162306a36Sopenharmony_ci .val_bits = 8, 34262306a36Sopenharmony_ci .wr_table = &axp152_writeable_table, 34362306a36Sopenharmony_ci .volatile_table = &axp152_volatile_table, 34462306a36Sopenharmony_ci .max_register = AXP152_PWM1_DUTY_CYCLE, 34562306a36Sopenharmony_ci .cache_type = REGCACHE_MAPLE, 34662306a36Sopenharmony_ci}; 34762306a36Sopenharmony_ci 34862306a36Sopenharmony_cistatic const struct regmap_config axp192_regmap_config = { 34962306a36Sopenharmony_ci .reg_bits = 8, 35062306a36Sopenharmony_ci .val_bits = 8, 35162306a36Sopenharmony_ci .wr_table = &axp192_writeable_table, 35262306a36Sopenharmony_ci .volatile_table = &axp192_volatile_table, 35362306a36Sopenharmony_ci .max_register = AXP20X_CC_CTRL, 35462306a36Sopenharmony_ci .cache_type = REGCACHE_RBTREE, 35562306a36Sopenharmony_ci}; 35662306a36Sopenharmony_ci 35762306a36Sopenharmony_cistatic const struct regmap_config axp20x_regmap_config = { 35862306a36Sopenharmony_ci .reg_bits = 8, 35962306a36Sopenharmony_ci .val_bits = 8, 36062306a36Sopenharmony_ci .wr_table = &axp20x_writeable_table, 36162306a36Sopenharmony_ci .volatile_table = &axp20x_volatile_table, 36262306a36Sopenharmony_ci .max_register = AXP20X_OCV(AXP20X_OCV_MAX), 36362306a36Sopenharmony_ci .cache_type = REGCACHE_MAPLE, 36462306a36Sopenharmony_ci}; 36562306a36Sopenharmony_ci 36662306a36Sopenharmony_cistatic const struct regmap_config axp22x_regmap_config = { 36762306a36Sopenharmony_ci .reg_bits = 8, 36862306a36Sopenharmony_ci .val_bits = 8, 36962306a36Sopenharmony_ci .wr_table = &axp22x_writeable_table, 37062306a36Sopenharmony_ci .volatile_table = &axp22x_volatile_table, 37162306a36Sopenharmony_ci .max_register = AXP22X_BATLOW_THRES1, 37262306a36Sopenharmony_ci .cache_type = REGCACHE_MAPLE, 37362306a36Sopenharmony_ci}; 37462306a36Sopenharmony_ci 37562306a36Sopenharmony_cistatic const struct regmap_config axp288_regmap_config = { 37662306a36Sopenharmony_ci .reg_bits = 8, 37762306a36Sopenharmony_ci .val_bits = 8, 37862306a36Sopenharmony_ci .wr_table = &axp288_writeable_table, 37962306a36Sopenharmony_ci .volatile_table = &axp288_volatile_table, 38062306a36Sopenharmony_ci .max_register = AXP288_FG_TUNE5, 38162306a36Sopenharmony_ci .cache_type = REGCACHE_MAPLE, 38262306a36Sopenharmony_ci}; 38362306a36Sopenharmony_ci 38462306a36Sopenharmony_cistatic const struct regmap_config axp313a_regmap_config = { 38562306a36Sopenharmony_ci .reg_bits = 8, 38662306a36Sopenharmony_ci .val_bits = 8, 38762306a36Sopenharmony_ci .wr_table = &axp313a_writeable_table, 38862306a36Sopenharmony_ci .volatile_table = &axp313a_volatile_table, 38962306a36Sopenharmony_ci .max_register = AXP313A_IRQ_STATE, 39062306a36Sopenharmony_ci .cache_type = REGCACHE_RBTREE, 39162306a36Sopenharmony_ci}; 39262306a36Sopenharmony_ci 39362306a36Sopenharmony_cistatic const struct regmap_config axp806_regmap_config = { 39462306a36Sopenharmony_ci .reg_bits = 8, 39562306a36Sopenharmony_ci .val_bits = 8, 39662306a36Sopenharmony_ci .wr_table = &axp806_writeable_table, 39762306a36Sopenharmony_ci .volatile_table = &axp806_volatile_table, 39862306a36Sopenharmony_ci .max_register = AXP806_REG_ADDR_EXT, 39962306a36Sopenharmony_ci .cache_type = REGCACHE_MAPLE, 40062306a36Sopenharmony_ci}; 40162306a36Sopenharmony_ci 40262306a36Sopenharmony_cistatic const struct regmap_config axp15060_regmap_config = { 40362306a36Sopenharmony_ci .reg_bits = 8, 40462306a36Sopenharmony_ci .val_bits = 8, 40562306a36Sopenharmony_ci .wr_table = &axp15060_writeable_table, 40662306a36Sopenharmony_ci .volatile_table = &axp15060_volatile_table, 40762306a36Sopenharmony_ci .max_register = AXP15060_IRQ2_STATE, 40862306a36Sopenharmony_ci .cache_type = REGCACHE_MAPLE, 40962306a36Sopenharmony_ci}; 41062306a36Sopenharmony_ci 41162306a36Sopenharmony_ci#define INIT_REGMAP_IRQ(_variant, _irq, _off, _mask) \ 41262306a36Sopenharmony_ci [_variant##_IRQ_##_irq] = { .reg_offset = (_off), .mask = BIT(_mask) } 41362306a36Sopenharmony_ci 41462306a36Sopenharmony_cistatic const struct regmap_irq axp152_regmap_irqs[] = { 41562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP152, LDO0IN_CONNECT, 0, 6), 41662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP152, LDO0IN_REMOVAL, 0, 5), 41762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP152, ALDO0IN_CONNECT, 0, 3), 41862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP152, ALDO0IN_REMOVAL, 0, 2), 41962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP152, DCDC1_V_LOW, 1, 5), 42062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP152, DCDC2_V_LOW, 1, 4), 42162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP152, DCDC3_V_LOW, 1, 3), 42262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP152, DCDC4_V_LOW, 1, 2), 42362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP152, PEK_SHORT, 1, 1), 42462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP152, PEK_LONG, 1, 0), 42562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP152, TIMER, 2, 7), 42662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP152, PEK_RIS_EDGE, 2, 6), 42762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP152, PEK_FAL_EDGE, 2, 5), 42862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP152, GPIO3_INPUT, 2, 3), 42962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP152, GPIO2_INPUT, 2, 2), 43062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP152, GPIO1_INPUT, 2, 1), 43162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP152, GPIO0_INPUT, 2, 0), 43262306a36Sopenharmony_ci}; 43362306a36Sopenharmony_ci 43462306a36Sopenharmony_cistatic const struct regmap_irq axp192_regmap_irqs[] = { 43562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, ACIN_OVER_V, 0, 7), 43662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, ACIN_PLUGIN, 0, 6), 43762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, ACIN_REMOVAL, 0, 5), 43862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, VBUS_OVER_V, 0, 4), 43962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, VBUS_PLUGIN, 0, 3), 44062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, VBUS_REMOVAL, 0, 2), 44162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, VBUS_V_LOW, 0, 1), 44262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, BATT_PLUGIN, 1, 7), 44362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, BATT_REMOVAL, 1, 6), 44462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, BATT_ENT_ACT_MODE, 1, 5), 44562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, BATT_EXIT_ACT_MODE, 1, 4), 44662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, CHARG, 1, 3), 44762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, CHARG_DONE, 1, 2), 44862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, BATT_TEMP_HIGH, 1, 1), 44962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, BATT_TEMP_LOW, 1, 0), 45062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, DIE_TEMP_HIGH, 2, 7), 45162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, CHARG_I_LOW, 2, 6), 45262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, DCDC1_V_LONG, 2, 5), 45362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, DCDC2_V_LONG, 2, 4), 45462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, DCDC3_V_LONG, 2, 3), 45562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, PEK_SHORT, 2, 1), 45662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, PEK_LONG, 2, 0), 45762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, N_OE_PWR_ON, 3, 7), 45862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, N_OE_PWR_OFF, 3, 6), 45962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, VBUS_VALID, 3, 5), 46062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, VBUS_NOT_VALID, 3, 4), 46162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, VBUS_SESS_VALID, 3, 3), 46262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, VBUS_SESS_END, 3, 2), 46362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, LOW_PWR_LVL, 3, 0), 46462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, TIMER, 4, 7), 46562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, GPIO2_INPUT, 4, 2), 46662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, GPIO1_INPUT, 4, 1), 46762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP192, GPIO0_INPUT, 4, 0), 46862306a36Sopenharmony_ci}; 46962306a36Sopenharmony_ci 47062306a36Sopenharmony_cistatic const struct regmap_irq axp20x_regmap_irqs[] = { 47162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, ACIN_OVER_V, 0, 7), 47262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, ACIN_PLUGIN, 0, 6), 47362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, ACIN_REMOVAL, 0, 5), 47462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, VBUS_OVER_V, 0, 4), 47562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, VBUS_PLUGIN, 0, 3), 47662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, VBUS_REMOVAL, 0, 2), 47762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, VBUS_V_LOW, 0, 1), 47862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, BATT_PLUGIN, 1, 7), 47962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, BATT_REMOVAL, 1, 6), 48062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, BATT_ENT_ACT_MODE, 1, 5), 48162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, BATT_EXIT_ACT_MODE, 1, 4), 48262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, CHARG, 1, 3), 48362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, CHARG_DONE, 1, 2), 48462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, BATT_TEMP_HIGH, 1, 1), 48562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, BATT_TEMP_LOW, 1, 0), 48662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, DIE_TEMP_HIGH, 2, 7), 48762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, CHARG_I_LOW, 2, 6), 48862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, DCDC1_V_LONG, 2, 5), 48962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, DCDC2_V_LONG, 2, 4), 49062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, DCDC3_V_LONG, 2, 3), 49162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, PEK_SHORT, 2, 1), 49262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, PEK_LONG, 2, 0), 49362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, N_OE_PWR_ON, 3, 7), 49462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, N_OE_PWR_OFF, 3, 6), 49562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, VBUS_VALID, 3, 5), 49662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, VBUS_NOT_VALID, 3, 4), 49762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, VBUS_SESS_VALID, 3, 3), 49862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, VBUS_SESS_END, 3, 2), 49962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, LOW_PWR_LVL1, 3, 1), 50062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, LOW_PWR_LVL2, 3, 0), 50162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, TIMER, 4, 7), 50262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, PEK_RIS_EDGE, 4, 6), 50362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, PEK_FAL_EDGE, 4, 5), 50462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, GPIO3_INPUT, 4, 3), 50562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, GPIO2_INPUT, 4, 2), 50662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, GPIO1_INPUT, 4, 1), 50762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP20X, GPIO0_INPUT, 4, 0), 50862306a36Sopenharmony_ci}; 50962306a36Sopenharmony_ci 51062306a36Sopenharmony_cistatic const struct regmap_irq axp22x_regmap_irqs[] = { 51162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, ACIN_OVER_V, 0, 7), 51262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, ACIN_PLUGIN, 0, 6), 51362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, ACIN_REMOVAL, 0, 5), 51462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, VBUS_OVER_V, 0, 4), 51562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, VBUS_PLUGIN, 0, 3), 51662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, VBUS_REMOVAL, 0, 2), 51762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, VBUS_V_LOW, 0, 1), 51862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, BATT_PLUGIN, 1, 7), 51962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, BATT_REMOVAL, 1, 6), 52062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, BATT_ENT_ACT_MODE, 1, 5), 52162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, BATT_EXIT_ACT_MODE, 1, 4), 52262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, CHARG, 1, 3), 52362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, CHARG_DONE, 1, 2), 52462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, BATT_TEMP_HIGH, 1, 1), 52562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, BATT_TEMP_LOW, 1, 0), 52662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, DIE_TEMP_HIGH, 2, 7), 52762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, PEK_SHORT, 2, 1), 52862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, PEK_LONG, 2, 0), 52962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, LOW_PWR_LVL1, 3, 1), 53062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, LOW_PWR_LVL2, 3, 0), 53162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, TIMER, 4, 7), 53262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, PEK_RIS_EDGE, 4, 6), 53362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, PEK_FAL_EDGE, 4, 5), 53462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, GPIO1_INPUT, 4, 1), 53562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP22X, GPIO0_INPUT, 4, 0), 53662306a36Sopenharmony_ci}; 53762306a36Sopenharmony_ci 53862306a36Sopenharmony_ci/* some IRQs are compatible with axp20x models */ 53962306a36Sopenharmony_cistatic const struct regmap_irq axp288_regmap_irqs[] = { 54062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, VBUS_FALL, 0, 2), 54162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, VBUS_RISE, 0, 3), 54262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, OV, 0, 4), 54362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, FALLING_ALT, 0, 5), 54462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, RISING_ALT, 0, 6), 54562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, OV_ALT, 0, 7), 54662306a36Sopenharmony_ci 54762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, DONE, 1, 2), 54862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, CHARGING, 1, 3), 54962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, SAFE_QUIT, 1, 4), 55062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, SAFE_ENTER, 1, 5), 55162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, ABSENT, 1, 6), 55262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, APPEND, 1, 7), 55362306a36Sopenharmony_ci 55462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, QWBTU, 2, 0), 55562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, WBTU, 2, 1), 55662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, QWBTO, 2, 2), 55762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, WBTO, 2, 3), 55862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, QCBTU, 2, 4), 55962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, CBTU, 2, 5), 56062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, QCBTO, 2, 6), 56162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, CBTO, 2, 7), 56262306a36Sopenharmony_ci 56362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, WL2, 3, 0), 56462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, WL1, 3, 1), 56562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, GPADC, 3, 2), 56662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, OT, 3, 7), 56762306a36Sopenharmony_ci 56862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, GPIO0, 4, 0), 56962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, GPIO1, 4, 1), 57062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, POKO, 4, 2), 57162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, POKL, 4, 3), 57262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, POKS, 4, 4), 57362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, POKN, 4, 5), 57462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, POKP, 4, 6), 57562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, TIMER, 4, 7), 57662306a36Sopenharmony_ci 57762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, MV_CHNG, 5, 0), 57862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP288, BC_USB_CHNG, 5, 1), 57962306a36Sopenharmony_ci}; 58062306a36Sopenharmony_ci 58162306a36Sopenharmony_cistatic const struct regmap_irq axp313a_regmap_irqs[] = { 58262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP313A, PEK_RIS_EDGE, 0, 7), 58362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP313A, PEK_FAL_EDGE, 0, 6), 58462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP313A, PEK_SHORT, 0, 5), 58562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP313A, PEK_LONG, 0, 4), 58662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP313A, DCDC3_V_LOW, 0, 3), 58762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP313A, DCDC2_V_LOW, 0, 2), 58862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP313A, DIE_TEMP_HIGH, 0, 0), 58962306a36Sopenharmony_ci}; 59062306a36Sopenharmony_ci 59162306a36Sopenharmony_cistatic const struct regmap_irq axp803_regmap_irqs[] = { 59262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, ACIN_OVER_V, 0, 7), 59362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, ACIN_PLUGIN, 0, 6), 59462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, ACIN_REMOVAL, 0, 5), 59562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, VBUS_OVER_V, 0, 4), 59662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, VBUS_PLUGIN, 0, 3), 59762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, VBUS_REMOVAL, 0, 2), 59862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, BATT_PLUGIN, 1, 7), 59962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, BATT_REMOVAL, 1, 6), 60062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, BATT_ENT_ACT_MODE, 1, 5), 60162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, BATT_EXIT_ACT_MODE, 1, 4), 60262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, CHARG, 1, 3), 60362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, CHARG_DONE, 1, 2), 60462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, BATT_CHG_TEMP_HIGH, 2, 7), 60562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, BATT_CHG_TEMP_HIGH_END, 2, 6), 60662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, BATT_CHG_TEMP_LOW, 2, 5), 60762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, BATT_CHG_TEMP_LOW_END, 2, 4), 60862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, BATT_ACT_TEMP_HIGH, 2, 3), 60962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, BATT_ACT_TEMP_HIGH_END, 2, 2), 61062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, BATT_ACT_TEMP_LOW, 2, 1), 61162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, BATT_ACT_TEMP_LOW_END, 2, 0), 61262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, DIE_TEMP_HIGH, 3, 7), 61362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, GPADC, 3, 2), 61462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, LOW_PWR_LVL1, 3, 1), 61562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, LOW_PWR_LVL2, 3, 0), 61662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, TIMER, 4, 7), 61762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, PEK_RIS_EDGE, 4, 6), 61862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, PEK_FAL_EDGE, 4, 5), 61962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, PEK_SHORT, 4, 4), 62062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, PEK_LONG, 4, 3), 62162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, PEK_OVER_OFF, 4, 2), 62262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, GPIO1_INPUT, 4, 1), 62362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, GPIO0_INPUT, 4, 0), 62462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, BC_USB_CHNG, 5, 1), 62562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP803, MV_CHNG, 5, 0), 62662306a36Sopenharmony_ci}; 62762306a36Sopenharmony_ci 62862306a36Sopenharmony_cistatic const struct regmap_irq axp806_regmap_irqs[] = { 62962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP806, DIE_TEMP_HIGH_LV1, 0, 0), 63062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP806, DIE_TEMP_HIGH_LV2, 0, 1), 63162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP806, DCDCA_V_LOW, 0, 3), 63262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP806, DCDCB_V_LOW, 0, 4), 63362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP806, DCDCC_V_LOW, 0, 5), 63462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP806, DCDCD_V_LOW, 0, 6), 63562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP806, DCDCE_V_LOW, 0, 7), 63662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP806, POK_LONG, 1, 0), 63762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP806, POK_SHORT, 1, 1), 63862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP806, WAKEUP, 1, 4), 63962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP806, POK_FALL, 1, 5), 64062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP806, POK_RISE, 1, 6), 64162306a36Sopenharmony_ci}; 64262306a36Sopenharmony_ci 64362306a36Sopenharmony_cistatic const struct regmap_irq axp809_regmap_irqs[] = { 64462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, ACIN_OVER_V, 0, 7), 64562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, ACIN_PLUGIN, 0, 6), 64662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, ACIN_REMOVAL, 0, 5), 64762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, VBUS_OVER_V, 0, 4), 64862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, VBUS_PLUGIN, 0, 3), 64962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, VBUS_REMOVAL, 0, 2), 65062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, VBUS_V_LOW, 0, 1), 65162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, BATT_PLUGIN, 1, 7), 65262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, BATT_REMOVAL, 1, 6), 65362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, BATT_ENT_ACT_MODE, 1, 5), 65462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, BATT_EXIT_ACT_MODE, 1, 4), 65562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, CHARG, 1, 3), 65662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, CHARG_DONE, 1, 2), 65762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, BATT_CHG_TEMP_HIGH, 2, 7), 65862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, BATT_CHG_TEMP_HIGH_END, 2, 6), 65962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, BATT_CHG_TEMP_LOW, 2, 5), 66062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, BATT_CHG_TEMP_LOW_END, 2, 4), 66162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, BATT_ACT_TEMP_HIGH, 2, 3), 66262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, BATT_ACT_TEMP_HIGH_END, 2, 2), 66362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, BATT_ACT_TEMP_LOW, 2, 1), 66462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, BATT_ACT_TEMP_LOW_END, 2, 0), 66562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, DIE_TEMP_HIGH, 3, 7), 66662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, LOW_PWR_LVL1, 3, 1), 66762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, LOW_PWR_LVL2, 3, 0), 66862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, TIMER, 4, 7), 66962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, PEK_RIS_EDGE, 4, 6), 67062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, PEK_FAL_EDGE, 4, 5), 67162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, PEK_SHORT, 4, 4), 67262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, PEK_LONG, 4, 3), 67362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, PEK_OVER_OFF, 4, 2), 67462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, GPIO1_INPUT, 4, 1), 67562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP809, GPIO0_INPUT, 4, 0), 67662306a36Sopenharmony_ci}; 67762306a36Sopenharmony_ci 67862306a36Sopenharmony_cistatic const struct regmap_irq axp15060_regmap_irqs[] = { 67962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP15060, DIE_TEMP_HIGH_LV1, 0, 0), 68062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP15060, DIE_TEMP_HIGH_LV2, 0, 1), 68162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP15060, DCDC1_V_LOW, 0, 2), 68262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP15060, DCDC2_V_LOW, 0, 3), 68362306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP15060, DCDC3_V_LOW, 0, 4), 68462306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP15060, DCDC4_V_LOW, 0, 5), 68562306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP15060, DCDC5_V_LOW, 0, 6), 68662306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP15060, DCDC6_V_LOW, 0, 7), 68762306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP15060, PEK_LONG, 1, 0), 68862306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP15060, PEK_SHORT, 1, 1), 68962306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP15060, GPIO1_INPUT, 1, 2), 69062306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP15060, PEK_FAL_EDGE, 1, 3), 69162306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP15060, PEK_RIS_EDGE, 1, 4), 69262306a36Sopenharmony_ci INIT_REGMAP_IRQ(AXP15060, GPIO2_INPUT, 1, 5), 69362306a36Sopenharmony_ci}; 69462306a36Sopenharmony_ci 69562306a36Sopenharmony_cistatic const struct regmap_irq_chip axp152_regmap_irq_chip = { 69662306a36Sopenharmony_ci .name = "axp152_irq_chip", 69762306a36Sopenharmony_ci .status_base = AXP152_IRQ1_STATE, 69862306a36Sopenharmony_ci .ack_base = AXP152_IRQ1_STATE, 69962306a36Sopenharmony_ci .unmask_base = AXP152_IRQ1_EN, 70062306a36Sopenharmony_ci .init_ack_masked = true, 70162306a36Sopenharmony_ci .irqs = axp152_regmap_irqs, 70262306a36Sopenharmony_ci .num_irqs = ARRAY_SIZE(axp152_regmap_irqs), 70362306a36Sopenharmony_ci .num_regs = 3, 70462306a36Sopenharmony_ci}; 70562306a36Sopenharmony_ci 70662306a36Sopenharmony_cistatic unsigned int axp192_get_irq_reg(struct regmap_irq_chip_data *data, 70762306a36Sopenharmony_ci unsigned int base, int index) 70862306a36Sopenharmony_ci{ 70962306a36Sopenharmony_ci /* linear mapping for IRQ1 to IRQ4 */ 71062306a36Sopenharmony_ci if (index < 4) 71162306a36Sopenharmony_ci return base + index; 71262306a36Sopenharmony_ci 71362306a36Sopenharmony_ci /* handle IRQ5 separately */ 71462306a36Sopenharmony_ci if (base == AXP192_IRQ1_EN) 71562306a36Sopenharmony_ci return AXP192_IRQ5_EN; 71662306a36Sopenharmony_ci 71762306a36Sopenharmony_ci return AXP192_IRQ5_STATE; 71862306a36Sopenharmony_ci} 71962306a36Sopenharmony_ci 72062306a36Sopenharmony_cistatic const struct regmap_irq_chip axp192_regmap_irq_chip = { 72162306a36Sopenharmony_ci .name = "axp192_irq_chip", 72262306a36Sopenharmony_ci .status_base = AXP192_IRQ1_STATE, 72362306a36Sopenharmony_ci .ack_base = AXP192_IRQ1_STATE, 72462306a36Sopenharmony_ci .unmask_base = AXP192_IRQ1_EN, 72562306a36Sopenharmony_ci .init_ack_masked = true, 72662306a36Sopenharmony_ci .irqs = axp192_regmap_irqs, 72762306a36Sopenharmony_ci .num_irqs = ARRAY_SIZE(axp192_regmap_irqs), 72862306a36Sopenharmony_ci .num_regs = 5, 72962306a36Sopenharmony_ci .get_irq_reg = axp192_get_irq_reg, 73062306a36Sopenharmony_ci}; 73162306a36Sopenharmony_ci 73262306a36Sopenharmony_cistatic const struct regmap_irq_chip axp20x_regmap_irq_chip = { 73362306a36Sopenharmony_ci .name = "axp20x_irq_chip", 73462306a36Sopenharmony_ci .status_base = AXP20X_IRQ1_STATE, 73562306a36Sopenharmony_ci .ack_base = AXP20X_IRQ1_STATE, 73662306a36Sopenharmony_ci .unmask_base = AXP20X_IRQ1_EN, 73762306a36Sopenharmony_ci .init_ack_masked = true, 73862306a36Sopenharmony_ci .irqs = axp20x_regmap_irqs, 73962306a36Sopenharmony_ci .num_irqs = ARRAY_SIZE(axp20x_regmap_irqs), 74062306a36Sopenharmony_ci .num_regs = 5, 74162306a36Sopenharmony_ci 74262306a36Sopenharmony_ci}; 74362306a36Sopenharmony_ci 74462306a36Sopenharmony_cistatic const struct regmap_irq_chip axp22x_regmap_irq_chip = { 74562306a36Sopenharmony_ci .name = "axp22x_irq_chip", 74662306a36Sopenharmony_ci .status_base = AXP20X_IRQ1_STATE, 74762306a36Sopenharmony_ci .ack_base = AXP20X_IRQ1_STATE, 74862306a36Sopenharmony_ci .unmask_base = AXP20X_IRQ1_EN, 74962306a36Sopenharmony_ci .init_ack_masked = true, 75062306a36Sopenharmony_ci .irqs = axp22x_regmap_irqs, 75162306a36Sopenharmony_ci .num_irqs = ARRAY_SIZE(axp22x_regmap_irqs), 75262306a36Sopenharmony_ci .num_regs = 5, 75362306a36Sopenharmony_ci}; 75462306a36Sopenharmony_ci 75562306a36Sopenharmony_cistatic const struct regmap_irq_chip axp288_regmap_irq_chip = { 75662306a36Sopenharmony_ci .name = "axp288_irq_chip", 75762306a36Sopenharmony_ci .status_base = AXP20X_IRQ1_STATE, 75862306a36Sopenharmony_ci .ack_base = AXP20X_IRQ1_STATE, 75962306a36Sopenharmony_ci .unmask_base = AXP20X_IRQ1_EN, 76062306a36Sopenharmony_ci .init_ack_masked = true, 76162306a36Sopenharmony_ci .irqs = axp288_regmap_irqs, 76262306a36Sopenharmony_ci .num_irqs = ARRAY_SIZE(axp288_regmap_irqs), 76362306a36Sopenharmony_ci .num_regs = 6, 76462306a36Sopenharmony_ci 76562306a36Sopenharmony_ci}; 76662306a36Sopenharmony_ci 76762306a36Sopenharmony_cistatic const struct regmap_irq_chip axp313a_regmap_irq_chip = { 76862306a36Sopenharmony_ci .name = "axp313a_irq_chip", 76962306a36Sopenharmony_ci .status_base = AXP313A_IRQ_STATE, 77062306a36Sopenharmony_ci .ack_base = AXP313A_IRQ_STATE, 77162306a36Sopenharmony_ci .unmask_base = AXP313A_IRQ_EN, 77262306a36Sopenharmony_ci .init_ack_masked = true, 77362306a36Sopenharmony_ci .irqs = axp313a_regmap_irqs, 77462306a36Sopenharmony_ci .num_irqs = ARRAY_SIZE(axp313a_regmap_irqs), 77562306a36Sopenharmony_ci .num_regs = 1, 77662306a36Sopenharmony_ci}; 77762306a36Sopenharmony_ci 77862306a36Sopenharmony_cistatic const struct regmap_irq_chip axp803_regmap_irq_chip = { 77962306a36Sopenharmony_ci .name = "axp803", 78062306a36Sopenharmony_ci .status_base = AXP20X_IRQ1_STATE, 78162306a36Sopenharmony_ci .ack_base = AXP20X_IRQ1_STATE, 78262306a36Sopenharmony_ci .unmask_base = AXP20X_IRQ1_EN, 78362306a36Sopenharmony_ci .init_ack_masked = true, 78462306a36Sopenharmony_ci .irqs = axp803_regmap_irqs, 78562306a36Sopenharmony_ci .num_irqs = ARRAY_SIZE(axp803_regmap_irqs), 78662306a36Sopenharmony_ci .num_regs = 6, 78762306a36Sopenharmony_ci}; 78862306a36Sopenharmony_ci 78962306a36Sopenharmony_cistatic const struct regmap_irq_chip axp806_regmap_irq_chip = { 79062306a36Sopenharmony_ci .name = "axp806", 79162306a36Sopenharmony_ci .status_base = AXP20X_IRQ1_STATE, 79262306a36Sopenharmony_ci .ack_base = AXP20X_IRQ1_STATE, 79362306a36Sopenharmony_ci .unmask_base = AXP20X_IRQ1_EN, 79462306a36Sopenharmony_ci .init_ack_masked = true, 79562306a36Sopenharmony_ci .irqs = axp806_regmap_irqs, 79662306a36Sopenharmony_ci .num_irqs = ARRAY_SIZE(axp806_regmap_irqs), 79762306a36Sopenharmony_ci .num_regs = 2, 79862306a36Sopenharmony_ci}; 79962306a36Sopenharmony_ci 80062306a36Sopenharmony_cistatic const struct regmap_irq_chip axp809_regmap_irq_chip = { 80162306a36Sopenharmony_ci .name = "axp809", 80262306a36Sopenharmony_ci .status_base = AXP20X_IRQ1_STATE, 80362306a36Sopenharmony_ci .ack_base = AXP20X_IRQ1_STATE, 80462306a36Sopenharmony_ci .unmask_base = AXP20X_IRQ1_EN, 80562306a36Sopenharmony_ci .init_ack_masked = true, 80662306a36Sopenharmony_ci .irqs = axp809_regmap_irqs, 80762306a36Sopenharmony_ci .num_irqs = ARRAY_SIZE(axp809_regmap_irqs), 80862306a36Sopenharmony_ci .num_regs = 5, 80962306a36Sopenharmony_ci}; 81062306a36Sopenharmony_ci 81162306a36Sopenharmony_cistatic const struct regmap_irq_chip axp15060_regmap_irq_chip = { 81262306a36Sopenharmony_ci .name = "axp15060", 81362306a36Sopenharmony_ci .status_base = AXP15060_IRQ1_STATE, 81462306a36Sopenharmony_ci .ack_base = AXP15060_IRQ1_STATE, 81562306a36Sopenharmony_ci .unmask_base = AXP15060_IRQ1_EN, 81662306a36Sopenharmony_ci .init_ack_masked = true, 81762306a36Sopenharmony_ci .irqs = axp15060_regmap_irqs, 81862306a36Sopenharmony_ci .num_irqs = ARRAY_SIZE(axp15060_regmap_irqs), 81962306a36Sopenharmony_ci .num_regs = 2, 82062306a36Sopenharmony_ci}; 82162306a36Sopenharmony_ci 82262306a36Sopenharmony_cistatic const struct mfd_cell axp192_cells[] = { 82362306a36Sopenharmony_ci { 82462306a36Sopenharmony_ci .name = "axp192-adc", 82562306a36Sopenharmony_ci .of_compatible = "x-powers,axp192-adc", 82662306a36Sopenharmony_ci }, { 82762306a36Sopenharmony_ci .name = "axp20x-battery-power-supply", 82862306a36Sopenharmony_ci .of_compatible = "x-powers,axp192-battery-power-supply", 82962306a36Sopenharmony_ci }, { 83062306a36Sopenharmony_ci .name = "axp20x-ac-power-supply", 83162306a36Sopenharmony_ci .of_compatible = "x-powers,axp202-ac-power-supply", 83262306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp192_ac_power_supply_resources), 83362306a36Sopenharmony_ci .resources = axp192_ac_power_supply_resources, 83462306a36Sopenharmony_ci }, { 83562306a36Sopenharmony_ci .name = "axp20x-usb-power-supply", 83662306a36Sopenharmony_ci .of_compatible = "x-powers,axp192-usb-power-supply", 83762306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp192_usb_power_supply_resources), 83862306a36Sopenharmony_ci .resources = axp192_usb_power_supply_resources, 83962306a36Sopenharmony_ci }, 84062306a36Sopenharmony_ci { .name = "axp20x-regulator" }, 84162306a36Sopenharmony_ci}; 84262306a36Sopenharmony_ci 84362306a36Sopenharmony_cistatic const struct mfd_cell axp20x_cells[] = { 84462306a36Sopenharmony_ci { 84562306a36Sopenharmony_ci .name = "axp20x-gpio", 84662306a36Sopenharmony_ci .of_compatible = "x-powers,axp209-gpio", 84762306a36Sopenharmony_ci }, { 84862306a36Sopenharmony_ci .name = "axp20x-pek", 84962306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp20x_pek_resources), 85062306a36Sopenharmony_ci .resources = axp20x_pek_resources, 85162306a36Sopenharmony_ci }, { 85262306a36Sopenharmony_ci .name = "axp20x-regulator", 85362306a36Sopenharmony_ci }, { 85462306a36Sopenharmony_ci .name = "axp20x-adc", 85562306a36Sopenharmony_ci .of_compatible = "x-powers,axp209-adc", 85662306a36Sopenharmony_ci }, { 85762306a36Sopenharmony_ci .name = "axp20x-battery-power-supply", 85862306a36Sopenharmony_ci .of_compatible = "x-powers,axp209-battery-power-supply", 85962306a36Sopenharmony_ci }, { 86062306a36Sopenharmony_ci .name = "axp20x-ac-power-supply", 86162306a36Sopenharmony_ci .of_compatible = "x-powers,axp202-ac-power-supply", 86262306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp20x_ac_power_supply_resources), 86362306a36Sopenharmony_ci .resources = axp20x_ac_power_supply_resources, 86462306a36Sopenharmony_ci }, { 86562306a36Sopenharmony_ci .name = "axp20x-usb-power-supply", 86662306a36Sopenharmony_ci .of_compatible = "x-powers,axp202-usb-power-supply", 86762306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp20x_usb_power_supply_resources), 86862306a36Sopenharmony_ci .resources = axp20x_usb_power_supply_resources, 86962306a36Sopenharmony_ci }, 87062306a36Sopenharmony_ci}; 87162306a36Sopenharmony_ci 87262306a36Sopenharmony_cistatic const struct mfd_cell axp221_cells[] = { 87362306a36Sopenharmony_ci { 87462306a36Sopenharmony_ci .name = "axp20x-gpio", 87562306a36Sopenharmony_ci .of_compatible = "x-powers,axp221-gpio", 87662306a36Sopenharmony_ci }, { 87762306a36Sopenharmony_ci .name = "axp221-pek", 87862306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp22x_pek_resources), 87962306a36Sopenharmony_ci .resources = axp22x_pek_resources, 88062306a36Sopenharmony_ci }, { 88162306a36Sopenharmony_ci .name = "axp20x-regulator", 88262306a36Sopenharmony_ci }, { 88362306a36Sopenharmony_ci .name = "axp22x-adc", 88462306a36Sopenharmony_ci .of_compatible = "x-powers,axp221-adc", 88562306a36Sopenharmony_ci }, { 88662306a36Sopenharmony_ci .name = "axp20x-ac-power-supply", 88762306a36Sopenharmony_ci .of_compatible = "x-powers,axp221-ac-power-supply", 88862306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp20x_ac_power_supply_resources), 88962306a36Sopenharmony_ci .resources = axp20x_ac_power_supply_resources, 89062306a36Sopenharmony_ci }, { 89162306a36Sopenharmony_ci .name = "axp20x-battery-power-supply", 89262306a36Sopenharmony_ci .of_compatible = "x-powers,axp221-battery-power-supply", 89362306a36Sopenharmony_ci }, { 89462306a36Sopenharmony_ci .name = "axp20x-usb-power-supply", 89562306a36Sopenharmony_ci .of_compatible = "x-powers,axp221-usb-power-supply", 89662306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp22x_usb_power_supply_resources), 89762306a36Sopenharmony_ci .resources = axp22x_usb_power_supply_resources, 89862306a36Sopenharmony_ci }, 89962306a36Sopenharmony_ci}; 90062306a36Sopenharmony_ci 90162306a36Sopenharmony_cistatic const struct mfd_cell axp223_cells[] = { 90262306a36Sopenharmony_ci { 90362306a36Sopenharmony_ci .name = "axp20x-gpio", 90462306a36Sopenharmony_ci .of_compatible = "x-powers,axp221-gpio", 90562306a36Sopenharmony_ci }, { 90662306a36Sopenharmony_ci .name = "axp221-pek", 90762306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp22x_pek_resources), 90862306a36Sopenharmony_ci .resources = axp22x_pek_resources, 90962306a36Sopenharmony_ci }, { 91062306a36Sopenharmony_ci .name = "axp22x-adc", 91162306a36Sopenharmony_ci .of_compatible = "x-powers,axp221-adc", 91262306a36Sopenharmony_ci }, { 91362306a36Sopenharmony_ci .name = "axp20x-battery-power-supply", 91462306a36Sopenharmony_ci .of_compatible = "x-powers,axp221-battery-power-supply", 91562306a36Sopenharmony_ci }, { 91662306a36Sopenharmony_ci .name = "axp20x-regulator", 91762306a36Sopenharmony_ci }, { 91862306a36Sopenharmony_ci .name = "axp20x-ac-power-supply", 91962306a36Sopenharmony_ci .of_compatible = "x-powers,axp221-ac-power-supply", 92062306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp20x_ac_power_supply_resources), 92162306a36Sopenharmony_ci .resources = axp20x_ac_power_supply_resources, 92262306a36Sopenharmony_ci }, { 92362306a36Sopenharmony_ci .name = "axp20x-usb-power-supply", 92462306a36Sopenharmony_ci .of_compatible = "x-powers,axp223-usb-power-supply", 92562306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp22x_usb_power_supply_resources), 92662306a36Sopenharmony_ci .resources = axp22x_usb_power_supply_resources, 92762306a36Sopenharmony_ci }, 92862306a36Sopenharmony_ci}; 92962306a36Sopenharmony_ci 93062306a36Sopenharmony_cistatic const struct mfd_cell axp152_cells[] = { 93162306a36Sopenharmony_ci { 93262306a36Sopenharmony_ci .name = "axp20x-pek", 93362306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp152_pek_resources), 93462306a36Sopenharmony_ci .resources = axp152_pek_resources, 93562306a36Sopenharmony_ci }, 93662306a36Sopenharmony_ci}; 93762306a36Sopenharmony_ci 93862306a36Sopenharmony_cistatic struct mfd_cell axp313a_cells[] = { 93962306a36Sopenharmony_ci MFD_CELL_NAME("axp20x-regulator"), 94062306a36Sopenharmony_ci MFD_CELL_RES("axp313a-pek", axp313a_pek_resources), 94162306a36Sopenharmony_ci}; 94262306a36Sopenharmony_ci 94362306a36Sopenharmony_cistatic const struct resource axp288_adc_resources[] = { 94462306a36Sopenharmony_ci DEFINE_RES_IRQ_NAMED(AXP288_IRQ_GPADC, "GPADC"), 94562306a36Sopenharmony_ci}; 94662306a36Sopenharmony_ci 94762306a36Sopenharmony_cistatic const struct resource axp288_extcon_resources[] = { 94862306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_VBUS_FALL), 94962306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_VBUS_RISE), 95062306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_MV_CHNG), 95162306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_BC_USB_CHNG), 95262306a36Sopenharmony_ci}; 95362306a36Sopenharmony_ci 95462306a36Sopenharmony_cistatic const struct resource axp288_charger_resources[] = { 95562306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_OV), 95662306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_DONE), 95762306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_CHARGING), 95862306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_SAFE_QUIT), 95962306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_SAFE_ENTER), 96062306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_QCBTU), 96162306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_CBTU), 96262306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_QCBTO), 96362306a36Sopenharmony_ci DEFINE_RES_IRQ(AXP288_IRQ_CBTO), 96462306a36Sopenharmony_ci}; 96562306a36Sopenharmony_ci 96662306a36Sopenharmony_cistatic const char * const axp288_fuel_gauge_suppliers[] = { "axp288_charger" }; 96762306a36Sopenharmony_ci 96862306a36Sopenharmony_cistatic const struct property_entry axp288_fuel_gauge_properties[] = { 96962306a36Sopenharmony_ci PROPERTY_ENTRY_STRING_ARRAY("supplied-from", axp288_fuel_gauge_suppliers), 97062306a36Sopenharmony_ci { } 97162306a36Sopenharmony_ci}; 97262306a36Sopenharmony_ci 97362306a36Sopenharmony_cistatic const struct software_node axp288_fuel_gauge_sw_node = { 97462306a36Sopenharmony_ci .name = "axp288_fuel_gauge", 97562306a36Sopenharmony_ci .properties = axp288_fuel_gauge_properties, 97662306a36Sopenharmony_ci}; 97762306a36Sopenharmony_ci 97862306a36Sopenharmony_cistatic const struct mfd_cell axp288_cells[] = { 97962306a36Sopenharmony_ci { 98062306a36Sopenharmony_ci .name = "axp288_adc", 98162306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp288_adc_resources), 98262306a36Sopenharmony_ci .resources = axp288_adc_resources, 98362306a36Sopenharmony_ci }, { 98462306a36Sopenharmony_ci .name = "axp288_extcon", 98562306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp288_extcon_resources), 98662306a36Sopenharmony_ci .resources = axp288_extcon_resources, 98762306a36Sopenharmony_ci }, { 98862306a36Sopenharmony_ci .name = "axp288_charger", 98962306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp288_charger_resources), 99062306a36Sopenharmony_ci .resources = axp288_charger_resources, 99162306a36Sopenharmony_ci }, { 99262306a36Sopenharmony_ci .name = "axp288_fuel_gauge", 99362306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp288_fuel_gauge_resources), 99462306a36Sopenharmony_ci .resources = axp288_fuel_gauge_resources, 99562306a36Sopenharmony_ci .swnode = &axp288_fuel_gauge_sw_node, 99662306a36Sopenharmony_ci }, { 99762306a36Sopenharmony_ci .name = "axp221-pek", 99862306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp288_power_button_resources), 99962306a36Sopenharmony_ci .resources = axp288_power_button_resources, 100062306a36Sopenharmony_ci }, { 100162306a36Sopenharmony_ci .name = "axp288_pmic_acpi", 100262306a36Sopenharmony_ci }, 100362306a36Sopenharmony_ci}; 100462306a36Sopenharmony_ci 100562306a36Sopenharmony_cistatic const struct mfd_cell axp803_cells[] = { 100662306a36Sopenharmony_ci { 100762306a36Sopenharmony_ci .name = "axp221-pek", 100862306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp803_pek_resources), 100962306a36Sopenharmony_ci .resources = axp803_pek_resources, 101062306a36Sopenharmony_ci }, { 101162306a36Sopenharmony_ci .name = "axp20x-gpio", 101262306a36Sopenharmony_ci .of_compatible = "x-powers,axp813-gpio", 101362306a36Sopenharmony_ci }, { 101462306a36Sopenharmony_ci .name = "axp813-adc", 101562306a36Sopenharmony_ci .of_compatible = "x-powers,axp813-adc", 101662306a36Sopenharmony_ci }, { 101762306a36Sopenharmony_ci .name = "axp20x-battery-power-supply", 101862306a36Sopenharmony_ci .of_compatible = "x-powers,axp813-battery-power-supply", 101962306a36Sopenharmony_ci }, { 102062306a36Sopenharmony_ci .name = "axp20x-ac-power-supply", 102162306a36Sopenharmony_ci .of_compatible = "x-powers,axp813-ac-power-supply", 102262306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp20x_ac_power_supply_resources), 102362306a36Sopenharmony_ci .resources = axp20x_ac_power_supply_resources, 102462306a36Sopenharmony_ci }, { 102562306a36Sopenharmony_ci .name = "axp20x-usb-power-supply", 102662306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp803_usb_power_supply_resources), 102762306a36Sopenharmony_ci .resources = axp803_usb_power_supply_resources, 102862306a36Sopenharmony_ci .of_compatible = "x-powers,axp813-usb-power-supply", 102962306a36Sopenharmony_ci }, 103062306a36Sopenharmony_ci { .name = "axp20x-regulator" }, 103162306a36Sopenharmony_ci}; 103262306a36Sopenharmony_ci 103362306a36Sopenharmony_cistatic const struct mfd_cell axp806_self_working_cells[] = { 103462306a36Sopenharmony_ci { 103562306a36Sopenharmony_ci .name = "axp221-pek", 103662306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp806_pek_resources), 103762306a36Sopenharmony_ci .resources = axp806_pek_resources, 103862306a36Sopenharmony_ci }, 103962306a36Sopenharmony_ci { .name = "axp20x-regulator" }, 104062306a36Sopenharmony_ci}; 104162306a36Sopenharmony_ci 104262306a36Sopenharmony_cistatic const struct mfd_cell axp806_cells[] = { 104362306a36Sopenharmony_ci { 104462306a36Sopenharmony_ci .id = 2, 104562306a36Sopenharmony_ci .name = "axp20x-regulator", 104662306a36Sopenharmony_ci }, 104762306a36Sopenharmony_ci}; 104862306a36Sopenharmony_ci 104962306a36Sopenharmony_cistatic const struct mfd_cell axp809_cells[] = { 105062306a36Sopenharmony_ci { 105162306a36Sopenharmony_ci .name = "axp20x-gpio", 105262306a36Sopenharmony_ci .of_compatible = "x-powers,axp221-gpio", 105362306a36Sopenharmony_ci }, { 105462306a36Sopenharmony_ci .name = "axp221-pek", 105562306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp809_pek_resources), 105662306a36Sopenharmony_ci .resources = axp809_pek_resources, 105762306a36Sopenharmony_ci }, { 105862306a36Sopenharmony_ci .id = 1, 105962306a36Sopenharmony_ci .name = "axp20x-regulator", 106062306a36Sopenharmony_ci }, 106162306a36Sopenharmony_ci}; 106262306a36Sopenharmony_ci 106362306a36Sopenharmony_cistatic const struct mfd_cell axp813_cells[] = { 106462306a36Sopenharmony_ci { 106562306a36Sopenharmony_ci .name = "axp221-pek", 106662306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp803_pek_resources), 106762306a36Sopenharmony_ci .resources = axp803_pek_resources, 106862306a36Sopenharmony_ci }, { 106962306a36Sopenharmony_ci .name = "axp20x-regulator", 107062306a36Sopenharmony_ci }, { 107162306a36Sopenharmony_ci .name = "axp20x-gpio", 107262306a36Sopenharmony_ci .of_compatible = "x-powers,axp813-gpio", 107362306a36Sopenharmony_ci }, { 107462306a36Sopenharmony_ci .name = "axp813-adc", 107562306a36Sopenharmony_ci .of_compatible = "x-powers,axp813-adc", 107662306a36Sopenharmony_ci }, { 107762306a36Sopenharmony_ci .name = "axp20x-battery-power-supply", 107862306a36Sopenharmony_ci .of_compatible = "x-powers,axp813-battery-power-supply", 107962306a36Sopenharmony_ci }, { 108062306a36Sopenharmony_ci .name = "axp20x-ac-power-supply", 108162306a36Sopenharmony_ci .of_compatible = "x-powers,axp813-ac-power-supply", 108262306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp20x_ac_power_supply_resources), 108362306a36Sopenharmony_ci .resources = axp20x_ac_power_supply_resources, 108462306a36Sopenharmony_ci }, { 108562306a36Sopenharmony_ci .name = "axp20x-usb-power-supply", 108662306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp803_usb_power_supply_resources), 108762306a36Sopenharmony_ci .resources = axp803_usb_power_supply_resources, 108862306a36Sopenharmony_ci .of_compatible = "x-powers,axp813-usb-power-supply", 108962306a36Sopenharmony_ci }, 109062306a36Sopenharmony_ci}; 109162306a36Sopenharmony_ci 109262306a36Sopenharmony_cistatic const struct mfd_cell axp15060_cells[] = { 109362306a36Sopenharmony_ci { 109462306a36Sopenharmony_ci .name = "axp221-pek", 109562306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(axp15060_pek_resources), 109662306a36Sopenharmony_ci .resources = axp15060_pek_resources, 109762306a36Sopenharmony_ci }, { 109862306a36Sopenharmony_ci .name = "axp20x-regulator", 109962306a36Sopenharmony_ci }, 110062306a36Sopenharmony_ci}; 110162306a36Sopenharmony_ci 110262306a36Sopenharmony_ci/* For boards that don't have IRQ line connected to SOC. */ 110362306a36Sopenharmony_cistatic const struct mfd_cell axp_regulator_only_cells[] = { 110462306a36Sopenharmony_ci { 110562306a36Sopenharmony_ci .name = "axp20x-regulator", 110662306a36Sopenharmony_ci }, 110762306a36Sopenharmony_ci}; 110862306a36Sopenharmony_ci 110962306a36Sopenharmony_cistatic int axp20x_power_off(struct sys_off_data *data) 111062306a36Sopenharmony_ci{ 111162306a36Sopenharmony_ci struct axp20x_dev *axp20x = data->cb_data; 111262306a36Sopenharmony_ci unsigned int shutdown_reg; 111362306a36Sopenharmony_ci 111462306a36Sopenharmony_ci switch (axp20x->variant) { 111562306a36Sopenharmony_ci case AXP313A_ID: 111662306a36Sopenharmony_ci shutdown_reg = AXP313A_SHUTDOWN_CTRL; 111762306a36Sopenharmony_ci break; 111862306a36Sopenharmony_ci default: 111962306a36Sopenharmony_ci shutdown_reg = AXP20X_OFF_CTRL; 112062306a36Sopenharmony_ci break; 112162306a36Sopenharmony_ci } 112262306a36Sopenharmony_ci 112362306a36Sopenharmony_ci regmap_write(axp20x->regmap, shutdown_reg, AXP20X_OFF); 112462306a36Sopenharmony_ci 112562306a36Sopenharmony_ci /* Give capacitors etc. time to drain to avoid kernel panic msg. */ 112662306a36Sopenharmony_ci mdelay(500); 112762306a36Sopenharmony_ci 112862306a36Sopenharmony_ci return NOTIFY_DONE; 112962306a36Sopenharmony_ci} 113062306a36Sopenharmony_ci 113162306a36Sopenharmony_ciint axp20x_match_device(struct axp20x_dev *axp20x) 113262306a36Sopenharmony_ci{ 113362306a36Sopenharmony_ci struct device *dev = axp20x->dev; 113462306a36Sopenharmony_ci const struct acpi_device_id *acpi_id; 113562306a36Sopenharmony_ci const struct of_device_id *of_id; 113662306a36Sopenharmony_ci 113762306a36Sopenharmony_ci if (dev->of_node) { 113862306a36Sopenharmony_ci of_id = of_match_device(dev->driver->of_match_table, dev); 113962306a36Sopenharmony_ci if (!of_id) { 114062306a36Sopenharmony_ci dev_err(dev, "Unable to match OF ID\n"); 114162306a36Sopenharmony_ci return -ENODEV; 114262306a36Sopenharmony_ci } 114362306a36Sopenharmony_ci axp20x->variant = (long)of_id->data; 114462306a36Sopenharmony_ci } else { 114562306a36Sopenharmony_ci acpi_id = acpi_match_device(dev->driver->acpi_match_table, dev); 114662306a36Sopenharmony_ci if (!acpi_id || !acpi_id->driver_data) { 114762306a36Sopenharmony_ci dev_err(dev, "Unable to match ACPI ID and data\n"); 114862306a36Sopenharmony_ci return -ENODEV; 114962306a36Sopenharmony_ci } 115062306a36Sopenharmony_ci axp20x->variant = (long)acpi_id->driver_data; 115162306a36Sopenharmony_ci } 115262306a36Sopenharmony_ci 115362306a36Sopenharmony_ci switch (axp20x->variant) { 115462306a36Sopenharmony_ci case AXP152_ID: 115562306a36Sopenharmony_ci axp20x->nr_cells = ARRAY_SIZE(axp152_cells); 115662306a36Sopenharmony_ci axp20x->cells = axp152_cells; 115762306a36Sopenharmony_ci axp20x->regmap_cfg = &axp152_regmap_config; 115862306a36Sopenharmony_ci axp20x->regmap_irq_chip = &axp152_regmap_irq_chip; 115962306a36Sopenharmony_ci break; 116062306a36Sopenharmony_ci case AXP192_ID: 116162306a36Sopenharmony_ci axp20x->nr_cells = ARRAY_SIZE(axp192_cells); 116262306a36Sopenharmony_ci axp20x->cells = axp192_cells; 116362306a36Sopenharmony_ci axp20x->regmap_cfg = &axp192_regmap_config; 116462306a36Sopenharmony_ci axp20x->regmap_irq_chip = &axp192_regmap_irq_chip; 116562306a36Sopenharmony_ci break; 116662306a36Sopenharmony_ci case AXP202_ID: 116762306a36Sopenharmony_ci case AXP209_ID: 116862306a36Sopenharmony_ci axp20x->nr_cells = ARRAY_SIZE(axp20x_cells); 116962306a36Sopenharmony_ci axp20x->cells = axp20x_cells; 117062306a36Sopenharmony_ci axp20x->regmap_cfg = &axp20x_regmap_config; 117162306a36Sopenharmony_ci axp20x->regmap_irq_chip = &axp20x_regmap_irq_chip; 117262306a36Sopenharmony_ci break; 117362306a36Sopenharmony_ci case AXP221_ID: 117462306a36Sopenharmony_ci axp20x->nr_cells = ARRAY_SIZE(axp221_cells); 117562306a36Sopenharmony_ci axp20x->cells = axp221_cells; 117662306a36Sopenharmony_ci axp20x->regmap_cfg = &axp22x_regmap_config; 117762306a36Sopenharmony_ci axp20x->regmap_irq_chip = &axp22x_regmap_irq_chip; 117862306a36Sopenharmony_ci break; 117962306a36Sopenharmony_ci case AXP223_ID: 118062306a36Sopenharmony_ci axp20x->nr_cells = ARRAY_SIZE(axp223_cells); 118162306a36Sopenharmony_ci axp20x->cells = axp223_cells; 118262306a36Sopenharmony_ci axp20x->regmap_cfg = &axp22x_regmap_config; 118362306a36Sopenharmony_ci axp20x->regmap_irq_chip = &axp22x_regmap_irq_chip; 118462306a36Sopenharmony_ci break; 118562306a36Sopenharmony_ci case AXP288_ID: 118662306a36Sopenharmony_ci axp20x->cells = axp288_cells; 118762306a36Sopenharmony_ci axp20x->nr_cells = ARRAY_SIZE(axp288_cells); 118862306a36Sopenharmony_ci axp20x->regmap_cfg = &axp288_regmap_config; 118962306a36Sopenharmony_ci axp20x->regmap_irq_chip = &axp288_regmap_irq_chip; 119062306a36Sopenharmony_ci axp20x->irq_flags = IRQF_TRIGGER_LOW; 119162306a36Sopenharmony_ci break; 119262306a36Sopenharmony_ci case AXP313A_ID: 119362306a36Sopenharmony_ci axp20x->nr_cells = ARRAY_SIZE(axp313a_cells); 119462306a36Sopenharmony_ci axp20x->cells = axp313a_cells; 119562306a36Sopenharmony_ci axp20x->regmap_cfg = &axp313a_regmap_config; 119662306a36Sopenharmony_ci axp20x->regmap_irq_chip = &axp313a_regmap_irq_chip; 119762306a36Sopenharmony_ci break; 119862306a36Sopenharmony_ci case AXP803_ID: 119962306a36Sopenharmony_ci axp20x->nr_cells = ARRAY_SIZE(axp803_cells); 120062306a36Sopenharmony_ci axp20x->cells = axp803_cells; 120162306a36Sopenharmony_ci axp20x->regmap_cfg = &axp288_regmap_config; 120262306a36Sopenharmony_ci axp20x->regmap_irq_chip = &axp803_regmap_irq_chip; 120362306a36Sopenharmony_ci break; 120462306a36Sopenharmony_ci case AXP806_ID: 120562306a36Sopenharmony_ci /* 120662306a36Sopenharmony_ci * Don't register the power key part if in slave mode or 120762306a36Sopenharmony_ci * if there is no interrupt line. 120862306a36Sopenharmony_ci */ 120962306a36Sopenharmony_ci if (of_property_read_bool(axp20x->dev->of_node, 121062306a36Sopenharmony_ci "x-powers,self-working-mode") && 121162306a36Sopenharmony_ci axp20x->irq > 0) { 121262306a36Sopenharmony_ci axp20x->nr_cells = ARRAY_SIZE(axp806_self_working_cells); 121362306a36Sopenharmony_ci axp20x->cells = axp806_self_working_cells; 121462306a36Sopenharmony_ci } else { 121562306a36Sopenharmony_ci axp20x->nr_cells = ARRAY_SIZE(axp806_cells); 121662306a36Sopenharmony_ci axp20x->cells = axp806_cells; 121762306a36Sopenharmony_ci } 121862306a36Sopenharmony_ci axp20x->regmap_cfg = &axp806_regmap_config; 121962306a36Sopenharmony_ci axp20x->regmap_irq_chip = &axp806_regmap_irq_chip; 122062306a36Sopenharmony_ci break; 122162306a36Sopenharmony_ci case AXP809_ID: 122262306a36Sopenharmony_ci axp20x->nr_cells = ARRAY_SIZE(axp809_cells); 122362306a36Sopenharmony_ci axp20x->cells = axp809_cells; 122462306a36Sopenharmony_ci axp20x->regmap_cfg = &axp22x_regmap_config; 122562306a36Sopenharmony_ci axp20x->regmap_irq_chip = &axp809_regmap_irq_chip; 122662306a36Sopenharmony_ci break; 122762306a36Sopenharmony_ci case AXP813_ID: 122862306a36Sopenharmony_ci axp20x->nr_cells = ARRAY_SIZE(axp813_cells); 122962306a36Sopenharmony_ci axp20x->cells = axp813_cells; 123062306a36Sopenharmony_ci axp20x->regmap_cfg = &axp288_regmap_config; 123162306a36Sopenharmony_ci /* 123262306a36Sopenharmony_ci * The IRQ table given in the datasheet is incorrect. 123362306a36Sopenharmony_ci * In IRQ enable/status registers 1, there are separate 123462306a36Sopenharmony_ci * IRQs for ACIN and VBUS, instead of bits [7:5] being 123562306a36Sopenharmony_ci * the same as bits [4:2]. So it shares the same IRQs 123662306a36Sopenharmony_ci * as the AXP803, rather than the AXP288. 123762306a36Sopenharmony_ci */ 123862306a36Sopenharmony_ci axp20x->regmap_irq_chip = &axp803_regmap_irq_chip; 123962306a36Sopenharmony_ci break; 124062306a36Sopenharmony_ci case AXP15060_ID: 124162306a36Sopenharmony_ci /* 124262306a36Sopenharmony_ci * Don't register the power key part if there is no interrupt 124362306a36Sopenharmony_ci * line. 124462306a36Sopenharmony_ci * 124562306a36Sopenharmony_ci * Since most use cases of AXP PMICs are Allwinner SOCs, board 124662306a36Sopenharmony_ci * designers follow Allwinner's reference design and connects 124762306a36Sopenharmony_ci * IRQ line to SOC, there's no need for those variants to deal 124862306a36Sopenharmony_ci * with cases that IRQ isn't connected. However, AXP15660 is 124962306a36Sopenharmony_ci * used by some other vendors' SOCs that didn't connect IRQ 125062306a36Sopenharmony_ci * line, we need to deal with this case. 125162306a36Sopenharmony_ci */ 125262306a36Sopenharmony_ci if (axp20x->irq > 0) { 125362306a36Sopenharmony_ci axp20x->nr_cells = ARRAY_SIZE(axp15060_cells); 125462306a36Sopenharmony_ci axp20x->cells = axp15060_cells; 125562306a36Sopenharmony_ci } else { 125662306a36Sopenharmony_ci axp20x->nr_cells = ARRAY_SIZE(axp_regulator_only_cells); 125762306a36Sopenharmony_ci axp20x->cells = axp_regulator_only_cells; 125862306a36Sopenharmony_ci } 125962306a36Sopenharmony_ci axp20x->regmap_cfg = &axp15060_regmap_config; 126062306a36Sopenharmony_ci axp20x->regmap_irq_chip = &axp15060_regmap_irq_chip; 126162306a36Sopenharmony_ci break; 126262306a36Sopenharmony_ci default: 126362306a36Sopenharmony_ci dev_err(dev, "unsupported AXP20X ID %lu\n", axp20x->variant); 126462306a36Sopenharmony_ci return -EINVAL; 126562306a36Sopenharmony_ci } 126662306a36Sopenharmony_ci dev_info(dev, "AXP20x variant %s found\n", 126762306a36Sopenharmony_ci axp20x_model_names[axp20x->variant]); 126862306a36Sopenharmony_ci 126962306a36Sopenharmony_ci return 0; 127062306a36Sopenharmony_ci} 127162306a36Sopenharmony_ciEXPORT_SYMBOL(axp20x_match_device); 127262306a36Sopenharmony_ci 127362306a36Sopenharmony_ciint axp20x_device_probe(struct axp20x_dev *axp20x) 127462306a36Sopenharmony_ci{ 127562306a36Sopenharmony_ci int ret; 127662306a36Sopenharmony_ci 127762306a36Sopenharmony_ci /* 127862306a36Sopenharmony_ci * The AXP806 supports either master/standalone or slave mode. 127962306a36Sopenharmony_ci * Slave mode allows sharing the serial bus, even with multiple 128062306a36Sopenharmony_ci * AXP806 which all have the same hardware address. 128162306a36Sopenharmony_ci * 128262306a36Sopenharmony_ci * This is done with extra "serial interface address extension", 128362306a36Sopenharmony_ci * or AXP806_BUS_ADDR_EXT, and "register address extension", or 128462306a36Sopenharmony_ci * AXP806_REG_ADDR_EXT, registers. The former is read-only, with 128562306a36Sopenharmony_ci * 1 bit customizable at the factory, and 1 bit depending on the 128662306a36Sopenharmony_ci * state of an external pin. The latter is writable. The device 128762306a36Sopenharmony_ci * will only respond to operations to its other registers when 128862306a36Sopenharmony_ci * the these device addressing bits (in the upper 4 bits of the 128962306a36Sopenharmony_ci * registers) match. 129062306a36Sopenharmony_ci * 129162306a36Sopenharmony_ci * By default we support an AXP806 chained to an AXP809 in slave 129262306a36Sopenharmony_ci * mode. Boards which use an AXP806 in master mode can set the 129362306a36Sopenharmony_ci * property "x-powers,master-mode" to override the default. 129462306a36Sopenharmony_ci */ 129562306a36Sopenharmony_ci if (axp20x->variant == AXP806_ID) { 129662306a36Sopenharmony_ci if (of_property_read_bool(axp20x->dev->of_node, 129762306a36Sopenharmony_ci "x-powers,master-mode") || 129862306a36Sopenharmony_ci of_property_read_bool(axp20x->dev->of_node, 129962306a36Sopenharmony_ci "x-powers,self-working-mode")) 130062306a36Sopenharmony_ci regmap_write(axp20x->regmap, AXP806_REG_ADDR_EXT, 130162306a36Sopenharmony_ci AXP806_REG_ADDR_EXT_ADDR_MASTER_MODE); 130262306a36Sopenharmony_ci else 130362306a36Sopenharmony_ci regmap_write(axp20x->regmap, AXP806_REG_ADDR_EXT, 130462306a36Sopenharmony_ci AXP806_REG_ADDR_EXT_ADDR_SLAVE_MODE); 130562306a36Sopenharmony_ci } 130662306a36Sopenharmony_ci 130762306a36Sopenharmony_ci /* Only if there is an interrupt line connected towards the CPU. */ 130862306a36Sopenharmony_ci if (axp20x->irq > 0) { 130962306a36Sopenharmony_ci ret = regmap_add_irq_chip(axp20x->regmap, axp20x->irq, 131062306a36Sopenharmony_ci IRQF_ONESHOT | IRQF_SHARED | axp20x->irq_flags, 131162306a36Sopenharmony_ci -1, axp20x->regmap_irq_chip, 131262306a36Sopenharmony_ci &axp20x->regmap_irqc); 131362306a36Sopenharmony_ci if (ret) { 131462306a36Sopenharmony_ci dev_err(axp20x->dev, "failed to add irq chip: %d\n", 131562306a36Sopenharmony_ci ret); 131662306a36Sopenharmony_ci return ret; 131762306a36Sopenharmony_ci } 131862306a36Sopenharmony_ci } 131962306a36Sopenharmony_ci 132062306a36Sopenharmony_ci ret = mfd_add_devices(axp20x->dev, -1, axp20x->cells, 132162306a36Sopenharmony_ci axp20x->nr_cells, NULL, 0, NULL); 132262306a36Sopenharmony_ci 132362306a36Sopenharmony_ci if (ret) { 132462306a36Sopenharmony_ci dev_err(axp20x->dev, "failed to add MFD devices: %d\n", ret); 132562306a36Sopenharmony_ci regmap_del_irq_chip(axp20x->irq, axp20x->regmap_irqc); 132662306a36Sopenharmony_ci return ret; 132762306a36Sopenharmony_ci } 132862306a36Sopenharmony_ci 132962306a36Sopenharmony_ci if (axp20x->variant != AXP288_ID) 133062306a36Sopenharmony_ci devm_register_sys_off_handler(axp20x->dev, 133162306a36Sopenharmony_ci SYS_OFF_MODE_POWER_OFF, 133262306a36Sopenharmony_ci SYS_OFF_PRIO_DEFAULT, 133362306a36Sopenharmony_ci axp20x_power_off, axp20x); 133462306a36Sopenharmony_ci 133562306a36Sopenharmony_ci dev_info(axp20x->dev, "AXP20X driver loaded\n"); 133662306a36Sopenharmony_ci 133762306a36Sopenharmony_ci return 0; 133862306a36Sopenharmony_ci} 133962306a36Sopenharmony_ciEXPORT_SYMBOL(axp20x_device_probe); 134062306a36Sopenharmony_ci 134162306a36Sopenharmony_civoid axp20x_device_remove(struct axp20x_dev *axp20x) 134262306a36Sopenharmony_ci{ 134362306a36Sopenharmony_ci mfd_remove_devices(axp20x->dev); 134462306a36Sopenharmony_ci regmap_del_irq_chip(axp20x->irq, axp20x->regmap_irqc); 134562306a36Sopenharmony_ci} 134662306a36Sopenharmony_ciEXPORT_SYMBOL(axp20x_device_remove); 134762306a36Sopenharmony_ci 134862306a36Sopenharmony_ciMODULE_DESCRIPTION("PMIC MFD core driver for AXP20X"); 134962306a36Sopenharmony_ciMODULE_AUTHOR("Carlo Caione <carlo@caione.org>"); 135062306a36Sopenharmony_ciMODULE_LICENSE("GPL"); 1351