/* * include/linux/power/axp_depend.h * (C) Copyright 2010-2016 * Allwinner Technology Co., Ltd. * Liming * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. */ #ifndef __AXP_DEPEND_H__ #define __AXP_DEPEND_H__ #include enum AW_POWER_ID { AXP_19X_ID = 0, AXP_209_ID, AXP_22X_ID, AXP_806_ID, AXP_808_ID, AXP_809_ID, AXP_803_ID, AXP_813_ID, AXP_152_ID, AXP_259_ID, AXP_DUMMY0_ID = 0x1 << 7, }; enum AXP19X_POWER_LDO { AXP19X_DCDC1_BIT = 1U << 0, AXP19X_DCDC2_BIT = 1U << 1, AXP19X_DCDC3_BIT = 1U << 2, AXP19X_LDO1_BIT = 1U << 3, AXP19X_LDO2_BIT = 1U << 4, AXP19X_LDO3_BIT = 1U << 5, AXP19X_LDO4_BIT = 1U << 6, }; enum AXP15X_POWER_LDO { AXP15X_DCDC1_BIT = 1U << 0, AXP15X_DCDC2_BIT = 1U << 1, AXP15X_DCDC3_BIT = 1U << 2, AXP15X_DCDC4_BIT = 1U << 3, AXP15X_LDO0_BIT = 1U << 4, AXP15X_RTC_BIT = 1U << 5, AXP15X_ALDO1_BIT = 1U << 6, AXP15X_ALDO2_BIT = 1U << 7, AXP15X_DLDO1_BIT = 1U << 8, AXP15X_DLDO2_BIT = 1U << 9, AXP15X_LDOIO0_BIT = 1U << 10, }; enum AXP22X_POWER_LDO { AXP22X_DCDC1_BIT = 1U << 0, AXP22X_DCDC2_BIT = 1U << 1, AXP22X_DCDC3_BIT = 1U << 2, AXP22X_DCDC4_BIT = 1U << 3, AXP22X_DCDC5_BIT = 1U << 4, AXP22X_ALDO1_BIT = 1U << 5, AXP22X_ALDO2_BIT = 1U << 6, AXP22X_ALDO3_BIT = 1U << 7, AXP22X_DLDO1_BIT = 1U << 8, AXP22X_DLDO2_BIT = 1U << 9, AXP22X_DLDO3_BIT = 1U << 10, AXP22X_DLDO4_BIT = 1U << 11, AXP22X_ELDO1_BIT = 1U << 12, AXP22X_ELDO2_BIT = 1U << 13, AXP22X_ELDO3_BIT = 1U << 14, AXP22X_DC5LDO_BIT = 1U << 15, AXP22X_LDOIO0_BIT = 1U << 16, AXP22X_LDOIO1_BIT = 1U << 17, AXP22X_DC1SW_BIT = 1U << 18, AXP22X_RTC_BIT = 1U << 19, AXP22X_SW0_BIT = 1U << 20, }; enum AXP806_808_POWER_LDO { AXP806_808_DCDC1_BIT = 1U << 0, AXP806_808_DCDC2_BIT = 1U << 1, AXP806_808_DCDC3_BIT = 1U << 2, AXP806_808_DCDC4_BIT = 1U << 3, AXP806_808_DCDC5_BIT = 1U << 4, AXP806_808_ALDO1_BIT = 1U << 5, AXP806_808_ALDO2_BIT = 1U << 6, AXP806_808_ALDO3_BIT = 1U << 7, AXP806_808_BLDO1_BIT = 1U << 8, AXP806_808_BLDO2_BIT = 1U << 9, AXP806_808_BLDO3_BIT = 1U << 10, AXP806_808_BLDO4_BIT = 1U << 11, AXP806_808_CLDO1_BIT = 1U << 12, AXP806_808_CLDO2_BIT = 1U << 13, AXP806_808_CLDO3_BIT = 1U << 14, AXP806_808_SW0_BIT = 1U << 15, }; typedef enum AXP858_1506_POWER_LDO { AXP858_1506_DCDC1 = 1U << 0, AXP858_1506_DCDC2 = 1U << 1, AXP858_1506_DCDC3 = 1U << 2, AXP858_1506_DCDC4 = 1U << 3, AXP858_1506_DCDC5 = 1U << 4, AXP858_1506_DCDC6 = 1U << 5, AXP858_1506_RTC = 1U << 6, AXP858_1506_ALDO1 = 1U << 7, AXP858_1506_ALDO2 = 1U << 8, AXP858_1506_ALDO3 = 1U << 9, AXP858_1506_ALDO4 = 1U << 10, AXP858_1506_ALDO5 = 1U << 11, AXP858_1506_BLDO1 = 1U << 12, AXP858_1506_BLDO2 = 1U << 13, AXP858_1506_BLDO3 = 1U << 14, AXP858_1506_BLDO4 = 1U << 15, AXP858_1506_BLDO5 = 1U << 16, AXP858_1506_CLDO1 = 1U << 17, AXP858_1506_CLDO2 = 1U << 18, AXP858_1506_CLDO3 = 1U << 19, AXP858_1506_CLDO4 = 1U << 20, AXP858_1506_CPUS = 1U << 21, AXP858_1506_DC1SW = 1U << 22, AXP858_1506_LDOIO1 = 1U << 23, AXP858_1506_LDOIO2 = 1U << 24, } axp858_1506_ldo_e; enum AXP809_POWER_LDO { AXP809_DCDC1_BIT = 1U << 0, AXP809_DCDC2_BIT = 1U << 1, AXP809_DCDC3_BIT = 1U << 2, AXP809_DCDC4_BIT = 1U << 3, AXP809_DCDC5_BIT = 1U << 4, AXP809_ALDO1_BIT = 1U << 5, AXP809_ALDO2_BIT = 1U << 6, AXP809_ALDO3_BIT = 1U << 7, AXP809_DLDO1_BIT = 1U << 8, AXP809_DLDO2_BIT = 1U << 9, AXP809_ELDO1_BIT = 1U << 10, AXP809_ELDO2_BIT = 1U << 11, AXP809_ELDO3_BIT = 1U << 12, AXP809_DC5LDO_BIT = 1U << 13, AXP809_LDOIO0_BIT = 1U << 14, AXP809_LDOIO1_BIT = 1U << 15, AXP809_SW0_BIT = 1U << 16, AXP809_DC1SW_BIT = 1U << 17, AXP809_RTC_BIT = 1U << 18, }; enum AXP803_813_POWER_LDO { AXP803_813_DCDC1_BIT = 1U << 0, AXP803_813_DCDC2_BIT = 1U << 1, AXP803_813_DCDC3_BIT = 1U << 2, AXP803_813_DCDC4_BIT = 1U << 3, AXP803_813_DCDC5_BIT = 1U << 4, AXP803_813_DCDC6_BIT = 1U << 5, AXP803_813_DCDC7_BIT = 1U << 6, AXP803_813_ALDO1_BIT = 1U << 7, AXP803_813_ALDO2_BIT = 1U << 8, AXP803_813_ALDO3_BIT = 1U << 9, AXP803_813_DLDO1_BIT = 1U << 10, AXP803_813_DLDO2_BIT = 1U << 11, AXP803_813_DLDO3_BIT = 1U << 12, AXP803_813_DLDO4_BIT = 1U << 13, AXP803_813_ELDO1_BIT = 1U << 14, AXP803_813_ELDO2_BIT = 1U << 15, AXP803_813_ELDO3_BIT = 1U << 16, AXP803_813_FLDO1_BIT = 1U << 17, AXP803_813_FLDO2_BIT = 1U << 18, AXP803_813_LDOIO0_BIT = 1U << 19, AXP803_813_LDOIO1_BIT = 1U << 20, AXP803_813_DC1SW_BIT = 1U << 21, AXP803_813_RTC_BIT = 1U << 22, }; enum AXP20X_POWER_LDO { AXP20X_DCDC2_BIT = 1U << 0, AXP20X_DCDC3_BIT = 1U << 1, AXP20X_LDO2_BIT = 1U << 2, AXP20X_LDO3_BIT = 1U << 3, AXP20X_LDO4_BIT = 1U << 4, AXP20X_LDOIO0_BIT = 1U << 5, AXP20X_RTC_BIT = 1U << 6, }; enum AXPDUMMY_POWER_LDO { AXPDUMMY_LDO1_BIT = 1U << 0, AXPDUMMY_LDO2_BIT = 1U << 1, AXPDUMMY_LDO3_BIT = 1U << 2, AXPDUMMY_LDO4_BIT = 1U << 3, AXPDUMMY_LDO5_BIT = 1U << 4, AXPDUMMY_LDO6_BIT = 1U << 5, AXPDUMMY_LDO7_BIT = 1U << 6, AXPDUMMY_LDO8_BIT = 1U << 7, AXPDUMMY_LDO9_BIT = 1U << 8, AXPDUMMY_LDO10_BIT = 1U << 9, AXPDUMMY_LDO11_BIT = 1U << 10, AXPDUMMY_LDO12_BIT = 1U << 11, AXPDUMMY_LDO13_BIT = 1U << 12, AXPDUMMY_LDO14_BIT = 1U << 13, AXPDUMMY_LDO15_BIT = 1U << 14, AXPDUMMY_LDO16_BIT = 1U << 15, AXPDUMMY_LDO17_BIT = 1U << 16, AXPDUMMY_LDO18_BIT = 1U << 17, AXPDUMMY_LDO19_BIT = 1U << 18, AXPDUMMY_LDO20_BIT = 1U << 19, }; /* FIXME: if you modify this struct, you should * sync this change with cpus source, * by superm at 2015-05-15. */ enum VDD_BIT { VDD_CPUA_BIT = 0, VDD_CPUB_BIT, VCC_DRAM_BIT, VDD_GPU_BIT, VDD_SYS_BIT, VDD_VPU_BIT, VDD_CPUS_BIT, VDD_DRAMPLL_BIT, VCC_ADC_BIT, VCC_PL_BIT, VCC_PM_BIT, VCC_IO_BIT, VCC_CPVDD_BIT, VCC_LDOIN_BIT, VCC_PLL_BIT, VCC_LPDDR_BIT, VDD_TEST_BIT, VDD_RES1_BIT, VDD_RES2_BIT, #if (defined(CONFIG_ARCH_SUN8IW10) || defined(CONFIG_ARCH_SUN8IW11)) VCC_PC_BIT, #else VDD_RES3_BIT, #endif VCC_MAX_INDEX, }; struct bitmap_name_mapping { unsigned int mask_bit; char id_name[20]; }; enum AW_CHARGE_TYPE { CHARGE_AC, CHARGE_USB_20, CHARGE_USB_30, CHARGE_MAX }; #define AXP_GPIO_IRQF_TRIGGER_RISING 0x00000001 #define AXP_GPIO_IRQF_TRIGGER_FALLING 0x00000002 /* * AXP status: * */ typedef enum AW_AXP_STATUS { AXP_NOTREADY = 0, AXP_READY, } aw_axp_status_e; extern struct raw_notifier_head axp_regu_notifier; extern int axp_gpio_irq_request(int pmu_num, int gpio_no, u32 (*handler)(int, void *), void *data); extern int axp_gpio_irq_enable(int pmu_num, int gpio_no); extern int axp_gpio_irq_disable(int pmu_num, int gpio_no); extern int axp_gpio_irq_set_type(int pmu_num, int gpio_no, unsigned long type); extern int axp_gpio_irq_free(int pmu_num, int gpio_no); extern struct bitmap_name_mapping pwr_dm_bitmap_name_mapping[VCC_MAX_INDEX]; extern int pwr_dm_bitmap_name_mapping_cnt; extern int axp_dev_register_count; /* internal interface*/ void axp_set_pwr_regu_tree(unsigned int value, unsigned int bitmap); signed int axp_check_sys_id(const char *supply_id); char *axp_get_sys_id(unsigned int bitmap); s32 axp_get_ldo_dependence(const char *ldo_name, signed int count, s32 (*get_dep_cb)(const char *)); void axp_set_sys_pwr_dm_mask(unsigned int bitmap, unsigned int enable); /* external interface*/ extern unsigned int axp_get_sys_pwr_dm_mask(void); extern int axp_add_sys_pwr_dm(const char *id); extern int axp_del_sys_pwr_dm(const char *id); extern int axp_is_sys_pwr_dm_id(const char *id); extern int axp_is_sys_pwr_dm_active(unsigned int bitmap); extern char *axp_get_sys_pwr_dm_id(unsigned int bitmap); extern void axp_get_pwr_regu_tree(unsigned int *p); extern ssize_t parse_pwr_dm_map(char *s, size_t size, unsigned int bitmap); extern int init_sys_pwr_dm(void); extern int axp_usbcur(enum AW_CHARGE_TYPE type); extern int axp_usbvol(enum AW_CHARGE_TYPE type); extern s32 axp_usb_det(void); extern s32 axp_usb_vbus_output(int high); extern int axp_powerkey_get(void); extern void axp_powerkey_set(int value); extern int axp_usb_is_connected(void); #endif /* __AXP_DEPEND_H__ */