int pmic_bus_init(void) { /* This cannot be 0 because it is used in SPL before BSS is ready */ static int needs_init = 1; __maybe_unused int ret; if (!needs_init) return 0; #if defined CONFIG_AXP221_POWER || defined CONFIG_AXP809_POWER || defined CONFIG_AXP818_POWER # ifdef CONFIG_MACH_SUN6I p2wi_init(); ret = p2wi_change_to_p2wi_mode(AXP221_CHIP_ADDR, AXP221_CTRL_ADDR, AXP221_INIT_DATA); # else ret = rsb_init(); if (ret) return ret; ret = rsb_set_device_address(AXP223_DEVICE_ADDR, AXP223_RUNTIME_ADDR); # endif if (ret) return ret; #endif needs_init = 0; return 0; }
/* * The axp221 uses the p2wi bus, the axp223 is identical (for all registers * used sofar) but uses the rsb bus. These functions abstract this. */ static int pmic_bus_init(void) { #ifdef CONFIG_MACH_SUN6I p2wi_init(); return p2wi_change_to_p2wi_mode(AXP221_CHIP_ADDR, AXP221_CTRL_ADDR, AXP221_INIT_DATA); #else int ret; rsb_init(); ret = rsb_set_device_mode(AXP223_DEVICE_MODE_DATA); if (ret) return ret; return rsb_set_device_address(AXP223_DEVICE_ADDR, AXP223_RUNTIME_ADDR); #endif }