/* * Copyright (C) ST-Ericsson SA 2010 * * License Terms: GNU General Public License v2 * * Authors: Sundar Iyer for ST-Ericsson * Bengt Jonsson for ST-Ericsson * Daniel Willerud for ST-Ericsson */ #ifndef __LINUX_MFD_AB8500_REGULATOR_H #define __LINUX_MFD_AB8500_REGULATOR_H #include /* AB8500 regulators */ enum ab8500_regulator_id { AB8500_LDO_AUX1, AB8500_LDO_AUX2, AB8500_LDO_AUX3, AB8500_LDO_INTCORE, AB8500_LDO_TVOUT, AB8500_LDO_AUDIO, AB8500_LDO_ANAMIC1, AB8500_LDO_ANAMIC2, AB8500_LDO_DMIC, AB8500_LDO_ANA, AB8500_NUM_REGULATORS, }; /* AB8505 regulators */ enum ab8505_regulator_id { AB8505_LDO_AUX1, AB8505_LDO_AUX2, AB8505_LDO_AUX3, AB8505_LDO_AUX4, AB8505_LDO_AUX5, AB8505_LDO_AUX6, AB8505_LDO_INTCORE, AB8505_LDO_ADC, AB8505_LDO_AUDIO, AB8505_LDO_ANAMIC1, AB8505_LDO_ANAMIC2, AB8505_LDO_AUX8, AB8505_LDO_ANA, AB8505_NUM_REGULATORS, }; /* AB8500 and AB8505 register initialization */ struct ab8500_regulator_reg_init { int id; u8 mask; u8 value; }; #define INIT_REGULATOR_REGISTER(_id, _mask, _value) \ { \ .id = _id, \ .mask = _mask, \ .value = _value, \ } /* AB8500 registers */ enum ab8500_regulator_reg { AB8500_REGUREQUESTCTRL2, AB8500_REGUREQUESTCTRL3, AB8500_REGUREQUESTCTRL4, AB8500_REGUSYSCLKREQ1HPVALID1, AB8500_REGUSYSCLKREQ1HPVALID2, AB8500_REGUHWHPREQ1VALID1, AB8500_REGUHWHPREQ1VALID2, AB8500_REGUHWHPREQ2VALID1, AB8500_REGUHWHPREQ2VALID2, AB8500_REGUSWHPREQVALID1, AB8500_REGUSWHPREQVALID2, AB8500_REGUSYSCLKREQVALID1, AB8500_REGUSYSCLKREQVALID2, AB8500_REGUMISC1, AB8500_VAUDIOSUPPLY, AB8500_REGUCTRL1VAMIC, AB8500_VPLLVANAREGU, AB8500_VREFDDR, AB8500_EXTSUPPLYREGU, AB8500_VAUX12REGU, AB8500_VRF1VAUX3REGU, AB8500_VAUX1SEL, AB8500_VAUX2SEL, AB8500_VRF1VAUX3SEL, AB8500_REGUCTRL2SPARE, AB8500_REGUCTRLDISCH, AB8500_REGUCTRLDISCH2, AB8500_NUM_REGULATOR_REGISTERS, }; /* AB8505 registers */ enum ab8505_regulator_reg { AB8505_REGUREQUESTCTRL1, AB8505_REGUREQUESTCTRL2, AB8505_REGUREQUESTCTRL3, AB8505_REGUREQUESTCTRL4, AB8505_REGUSYSCLKREQ1HPVALID1, AB8505_REGUSYSCLKREQ1HPVALID2, AB8505_REGUHWHPREQ1VALID1, AB8505_REGUHWHPREQ1VALID2, AB8505_REGUHWHPREQ2VALID1, AB8505_REGUHWHPREQ2VALID2, AB8505_REGUSWHPREQVALID1, AB8505_REGUSWHPREQVALID2, AB8505_REGUSYSCLKREQVALID1, AB8505_REGUSYSCLKREQVALID2, AB8505_REGUVAUX4REQVALID, AB8505_REGUMISC1, AB8505_VAUDIOSUPPLY, AB8505_REGUCTRL1VAMIC, AB8505_VSMPSAREGU, AB8505_VSMPSBREGU, AB8505_VSAFEREGU, /* NOTE! PRCMU register */ AB8505_VPLLVANAREGU, AB8505_EXTSUPPLYREGU, AB8505_VAUX12REGU, AB8505_VRF1VAUX3REGU, AB8505_VSMPSASEL1, AB8505_VSMPSASEL2, AB8505_VSMPSASEL3, AB8505_VSMPSBSEL1, AB8505_VSMPSBSEL2, AB8505_VSMPSBSEL3, AB8505_VSAFESEL1, /* NOTE! PRCMU register */ AB8505_VSAFESEL2, /* NOTE! PRCMU register */ AB8505_VSAFESEL3, /* NOTE! PRCMU register */ AB8505_VAUX1SEL, AB8505_VAUX2SEL, AB8505_VRF1VAUX3SEL, AB8505_VAUX4REQCTRL, AB8505_VAUX4REGU, AB8505_VAUX4SEL, AB8505_REGUCTRLDISCH, AB8505_REGUCTRLDISCH2, AB8505_REGUCTRLDISCH3, AB8505_CTRLVAUX5, AB8505_CTRLVAUX6, AB8505_NUM_REGULATOR_REGISTERS, }; /* AB8500 external regulators */ struct ab8500_ext_regulator_cfg { bool hwreq; /* requires hw mode or high power mode */ }; enum ab8500_ext_regulator_id { AB8500_EXT_SUPPLY1, AB8500_EXT_SUPPLY2, AB8500_EXT_SUPPLY3, AB8500_NUM_EXT_REGULATORS, }; /* AB8500 regulator platform data */ struct ab8500_regulator_platform_data { int num_reg_init; struct ab8500_regulator_reg_init *reg_init; int num_regulator; struct regulator_init_data *regulator; int num_ext_regulator; struct regulator_init_data *ext_regulator; }; #endif