Umang Agrawal | 89f6dcb | 2018-01-03 19:07:47 +0530 | [diff] [blame] | 1 | /* Copyright (c) 2012-2015, 2017-2018, The Linux Foundation. All rights reserved. |
Deepa Dinamani | 2279965 | 2012-07-21 12:26:22 -0700 | [diff] [blame] | 2 | |
| 3 | * Redistribution and use in source and binary forms, with or without |
| 4 | * modification, are permitted provided that the following conditions are |
| 5 | * met: |
| 6 | * * Redistributions of source code must retain the above copyright |
| 7 | * notice, this list of conditions and the following disclaimer. |
| 8 | * * Redistributions in binary form must reproduce the above |
| 9 | * copyright notice, this list of conditions and the following |
| 10 | * disclaimer in the documentation and/or other materials provided |
| 11 | * with the distribution. |
Parth Dixit | c2e6dfe | 2015-06-19 15:57:47 +0530 | [diff] [blame] | 12 | * * Neither the name of The Linux Foundation, nor the names of its |
Deepa Dinamani | 2279965 | 2012-07-21 12:26:22 -0700 | [diff] [blame] | 13 | * contributors may be used to endorse or promote products derived |
| 14 | * from this software without specific prior written permission. |
| 15 | * |
| 16 | * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED |
| 17 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
| 18 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT |
| 19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS |
| 20 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| 21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| 22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR |
| 23 | * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
| 24 | * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE |
| 25 | * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN |
| 26 | * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 27 | */ |
| 28 | |
| 29 | #ifndef _PM8x41_H_ |
| 30 | #define _PM8x41_H_ |
| 31 | |
Channagoud Kadabi | 0e60b7d | 2012-11-01 22:56:08 +0530 | [diff] [blame] | 32 | #include <sys/types.h> |
| 33 | |
Deepa Dinamani | 9a61293 | 2012-08-14 16:15:03 -0700 | [diff] [blame] | 34 | #define PM_GPIO_DIR_OUT 0x01 |
| 35 | #define PM_GPIO_DIR_IN 0x00 |
| 36 | #define PM_GPIO_DIR_BOTH 0x02 |
| 37 | |
| 38 | #define PM_GPIO_PULL_UP_30 0 |
| 39 | #define PM_GPIO_PULL_UP_1_5 1 |
| 40 | #define PM_GPIO_PULL_UP_31_5 2 |
| 41 | /* 1.5uA + 30uA boost */ |
| 42 | #define PM_GPIO_PULL_UP_1_5_30 3 |
Kuogee Hsieh | 1183511 | 2013-10-04 15:50:36 -0700 | [diff] [blame] | 43 | #define PM_GPIO_PULLDOWN_10 4 |
Padmanabhan Komanduru | 2ab03a6 | 2018-05-17 14:38:59 +0530 | [diff] [blame] | 44 | #define PM_GPIO_NO_PULL 5 |
Deepa Dinamani | 9a61293 | 2012-08-14 16:15:03 -0700 | [diff] [blame] | 45 | |
Siddhartha Agrawal | d61f81e | 2012-12-17 19:20:35 -0800 | [diff] [blame] | 46 | |
| 47 | #define PM_GPIO_OUT_CMOS 0x00 |
| 48 | #define PM_GPIO_OUT_DRAIN_NMOS 0x01 |
| 49 | #define PM_GPIO_OUT_DRAIN_PMOS 0x02 |
| 50 | |
| 51 | #define PM_GPIO_OUT_DRIVE_LOW 0x01 |
| 52 | #define PM_GPIO_OUT_DRIVE_MED 0x02 |
| 53 | #define PM_GPIO_OUT_DRIVE_HIGH 0x03 |
| 54 | |
Siddhartha Agrawal | d61f81e | 2012-12-17 19:20:35 -0800 | [diff] [blame] | 55 | #define PM_GPIO_FUNC_LOW 0x00 |
| 56 | #define PM_GPIO_FUNC_HIGH 0x01 |
Kuogee Hsieh | 1183511 | 2013-10-04 15:50:36 -0700 | [diff] [blame] | 57 | #define PM_GPIO_FUNC_2 0x06 |
Dhaval Patel | 171f0e4 | 2013-10-18 18:56:23 -0700 | [diff] [blame] | 58 | #define PM_GPIO_FUNC_1 0x04 |
Siddhartha Agrawal | d61f81e | 2012-12-17 19:20:35 -0800 | [diff] [blame] | 59 | |
| 60 | #define PM_GPIO_MODE_MASK 0x70 |
| 61 | #define PM_GPIO_OUTPUT_MASK 0x0F |
| 62 | |
Neeti Desai | 120b55d | 2012-08-20 17:15:56 -0700 | [diff] [blame] | 63 | #define PON_PSHOLD_WARM_RESET 0x1 |
Deepa Dinamani | 3c9865d | 2013-03-08 14:03:19 -0800 | [diff] [blame] | 64 | #define PON_PSHOLD_SHUTDOWN 0x4 |
Sundarajan Srinivasan | efc61b6 | 2013-07-19 12:08:07 -0700 | [diff] [blame] | 65 | #define PON_PSHOLD_HARD_RESET 0x7 |
Neeti Desai | 120b55d | 2012-08-20 17:15:56 -0700 | [diff] [blame] | 66 | |
Ashish Garg | 4499247 | 2017-08-07 14:36:59 +0530 | [diff] [blame] | 67 | #define PM_GPIO_NO_INVERT 0x00 |
| 68 | #define PM_GPIO_INVERT 0x01 |
| 69 | |
Channagoud Kadabi | 36c19ea | 2013-07-05 16:28:44 -0700 | [diff] [blame] | 70 | enum PM8X41_VERSIONS |
| 71 | { |
| 72 | PM8X41_VERSION_V1 = 0, |
| 73 | PM8X41_VERSION_V2 = 1, |
| 74 | }; |
| 75 | |
Deepa Dinamani | 7564f2a | 2013-02-05 17:55:51 -0800 | [diff] [blame] | 76 | |
sundarajan srinivasan | d0f59e8 | 2013-02-12 19:17:02 -0800 | [diff] [blame] | 77 | /*Target power on reasons*/ |
Ameya Thakur | ca145d7 | 2013-07-17 16:52:02 -0700 | [diff] [blame] | 78 | #define HARD_RST 1 |
sundarajan srinivasan | d0f59e8 | 2013-02-12 19:17:02 -0800 | [diff] [blame] | 79 | #define DC_CHG 8 |
| 80 | #define USB_CHG 16 |
| 81 | #define PON1 32 |
| 82 | #define CBLPWR_N 64 |
| 83 | #define KPDPWR_N 128 |
| 84 | |
Matthew Qin | 5e90d83 | 2014-07-11 11:15:22 +0800 | [diff] [blame] | 85 | /*Target power off reasons*/ |
| 86 | #define KPDPWR_AND_RESIN 32 |
| 87 | #define STAGE3 128 |
| 88 | |
Deepa Dinamani | 9a61293 | 2012-08-14 16:15:03 -0700 | [diff] [blame] | 89 | struct pm8x41_gpio { |
| 90 | int direction; |
| 91 | int output_buffer; |
| 92 | int output_value; |
| 93 | int pull; |
| 94 | int vin_sel; |
| 95 | int out_strength; |
| 96 | int function; |
| 97 | int inv_int_pol; |
| 98 | int disable_pin; |
| 99 | }; |
| 100 | |
Deepa Dinamani | e69ba61 | 2013-06-03 16:10:09 -0700 | [diff] [blame] | 101 | struct pm8x41_ldo { |
| 102 | uint8_t type; |
| 103 | uint32_t base; |
| 104 | }; |
| 105 | |
| 106 | /* LDO base addresses. */ |
| 107 | #define PM8x41_LDO2 0x14100 |
| 108 | #define PM8x41_LDO4 0x14300 |
Ray Zhang | 898675f | 2013-05-25 23:13:40 +0800 | [diff] [blame] | 109 | #define PM8x41_LDO8 0x14700 |
Deepa Dinamani | e69ba61 | 2013-06-03 16:10:09 -0700 | [diff] [blame] | 110 | #define PM8x41_LDO12 0x14B00 |
| 111 | #define PM8x41_LDO14 0x14D00 |
Ray Zhang | 898675f | 2013-05-25 23:13:40 +0800 | [diff] [blame] | 112 | #define PM8x41_LDO15 0x14E00 |
Deepa Dinamani | e69ba61 | 2013-06-03 16:10:09 -0700 | [diff] [blame] | 113 | #define PM8x41_LDO19 0x15200 |
| 114 | #define PM8x41_LDO22 0x15500 |
| 115 | |
| 116 | /* LDO voltage ranges */ |
| 117 | #define NLDO_UV_MIN 375000 |
| 118 | #define NLDO_UV_MAX 1537500 |
| 119 | #define NLDO_UV_STEP 12500 |
| 120 | #define NLDO_UV_VMIN_LOW 750000 |
| 121 | |
| 122 | #define PLDO_UV_VMIN_LOW 750000 |
| 123 | #define PLDO_UV_VMIN_MID 1500000 |
| 124 | #define PLDO_UV_VMIN_HIGH 1750000 |
| 125 | |
| 126 | #define PLDO_UV_MIN 1537500 |
| 127 | #define PDLO_UV_MID 3075000 |
| 128 | #define PLDO_UV_MAX 4900000 |
| 129 | #define PLDO_UV_STEP_LOW 12500 |
| 130 | #define PLDO_UV_STEP_MID 25000 |
| 131 | #define PLDO_UV_STEP_HIGH 50000 |
| 132 | |
| 133 | #define LDO_RANGE_SEL_BIT 0 |
| 134 | #define LDO_VSET_SEL_BIT 0 |
| 135 | #define LDO_VREG_ENABLE_BIT 7 |
| 136 | #define LDO_NORMAL_PWR_BIT 7 |
| 137 | |
| 138 | #define PLDO_TYPE 0 |
| 139 | #define NLDO_TYPE 1 |
| 140 | |
| 141 | #define LDO(_base, _type) \ |
| 142 | { \ |
| 143 | .type = _type, \ |
| 144 | .base = _base, \ |
| 145 | } |
| 146 | |
Deepa Dinamani | c342f12 | 2013-06-12 15:41:31 -0700 | [diff] [blame] | 147 | enum mpp_vin_select |
| 148 | { |
| 149 | MPP_VIN0, |
| 150 | MPP_VIN1, |
| 151 | MPP_VIN2, |
| 152 | MPP_VIN3, |
| 153 | }; |
| 154 | |
| 155 | enum mpp_mode_en_source_select |
| 156 | { |
| 157 | MPP_LOW, |
| 158 | MPP_HIGH, |
| 159 | MPP_PAIRED_MPP, |
| 160 | MPP_NOT_PAIRED_MPP, |
| 161 | MPP_DTEST1 = 8, |
| 162 | MPP_NOT_DTEST1, |
| 163 | MPP_DTEST2, |
| 164 | MPP_NOT_DTEST2, |
| 165 | MPP_DTEST3, |
| 166 | MPP_NOT_DTEST3, |
| 167 | MPP_DTEST4, |
| 168 | MPP_NOT_DTEST4, |
| 169 | }; |
| 170 | |
| 171 | enum mpp_en_ctl |
| 172 | { |
| 173 | MPP_DISABLE, |
| 174 | MPP_ENABLE, |
| 175 | }; |
| 176 | |
Ajay Singh Parmar | 502ed71 | 2014-07-23 22:58:43 -0700 | [diff] [blame] | 177 | enum mvs_en_ctl |
| 178 | { |
| 179 | MVS_DISABLE, |
| 180 | MVS_ENABLE, |
| 181 | }; |
| 182 | |
Deepa Dinamani | c342f12 | 2013-06-12 15:41:31 -0700 | [diff] [blame] | 183 | enum mpp_mode |
| 184 | { |
| 185 | MPP_DIGITAL_INPUT, |
| 186 | MPP_DIGITAL_OUTPUT, |
| 187 | MPP_DIGITAL_IN_AND_OUT, |
| 188 | MPP_BIDIRECTIONAL, |
| 189 | MPP_ANALOG_INPUT, |
| 190 | MPP_ANALOG_OUTPUT, |
| 191 | MPP_CURRENT_SINK, |
| 192 | MPP_RESERVED, |
| 193 | }; |
| 194 | |
| 195 | struct pm8x41_mpp |
| 196 | { |
| 197 | uint32_t base; |
| 198 | enum mpp_vin_select vin; |
| 199 | enum mpp_mode_en_source_select mode; |
| 200 | }; |
| 201 | |
Ajay Singh Parmar | 502ed71 | 2014-07-23 22:58:43 -0700 | [diff] [blame] | 202 | struct pm8x41_mvs |
| 203 | { |
| 204 | uint32_t base; |
| 205 | }; |
| 206 | |
Kuogee Hsieh | 383a5ae | 2014-09-02 16:31:39 -0700 | [diff] [blame] | 207 | #define PM8x41_MMP1_BASE 0xA000 |
Sundarajan Srinivasan | 971b0d7 | 2013-12-10 17:56:22 -0800 | [diff] [blame] | 208 | #define PM8x41_MMP2_BASE 0xA100 |
Deepa Dinamani | c342f12 | 2013-06-12 15:41:31 -0700 | [diff] [blame] | 209 | #define PM8x41_MMP3_BASE 0xA200 |
Aparna Mallavarapu | 09c53df | 2014-03-28 17:47:43 +0530 | [diff] [blame] | 210 | #define PM8x41_MMP4_BASE 0xA300 |
Ajay Singh Parmar | 502ed71 | 2014-07-23 22:58:43 -0700 | [diff] [blame] | 211 | #define PM8x41_MVS1_BASE 0x18400 |
Deepa Dinamani | c342f12 | 2013-06-12 15:41:31 -0700 | [diff] [blame] | 212 | |
Kuogee Hsieh | 1183511 | 2013-10-04 15:50:36 -0700 | [diff] [blame] | 213 | void pm8x41_lpg_write(uint8_t chan, uint8_t off, uint8_t val); |
Kuogee Hsieh | 383a5ae | 2014-09-02 16:31:39 -0700 | [diff] [blame] | 214 | void pm8x41_lpg_write_sid(uint8_t sid, uint8_t chan, uint8_t off, uint8_t val); |
Deepa Dinamani | 9a61293 | 2012-08-14 16:15:03 -0700 | [diff] [blame] | 215 | int pm8x41_gpio_get(uint8_t gpio, uint8_t *status); |
Kuogee Hsieh | 383a5ae | 2014-09-02 16:31:39 -0700 | [diff] [blame] | 216 | int pm8x41_gpio_get_sid(uint8_t sid, uint8_t gpio, uint8_t *status); |
Siddhartha Agrawal | d61f81e | 2012-12-17 19:20:35 -0800 | [diff] [blame] | 217 | int pm8x41_gpio_set(uint8_t gpio, uint8_t value); |
Kuogee Hsieh | 383a5ae | 2014-09-02 16:31:39 -0700 | [diff] [blame] | 218 | int pm8x41_gpio_set_sid(uint8_t sid, uint8_t gpio, uint8_t value); |
Deepa Dinamani | 9a61293 | 2012-08-14 16:15:03 -0700 | [diff] [blame] | 219 | int pm8x41_gpio_config(uint8_t gpio, struct pm8x41_gpio *config); |
Kuogee Hsieh | 383a5ae | 2014-09-02 16:31:39 -0700 | [diff] [blame] | 220 | int pm8x41_gpio_config_sid(uint8_t sid, uint8_t gpio, struct pm8x41_gpio *config); |
Deepa Dinamani | 2279965 | 2012-07-21 12:26:22 -0700 | [diff] [blame] | 221 | void pm8x41_set_boot_done(); |
Channagoud Kadabi | 36c19ea | 2013-07-05 16:28:44 -0700 | [diff] [blame] | 222 | uint32_t pm8x41_v2_resin_status(); |
Deepa Dinamani | c7f8758 | 2013-02-01 15:24:49 -0800 | [diff] [blame] | 223 | uint32_t pm8x41_resin_status(); |
Neeti Desai | 120b55d | 2012-08-20 17:15:56 -0700 | [diff] [blame] | 224 | void pm8x41_reset_configure(uint8_t); |
Channagoud Kadabi | 1312b5d | 2015-01-28 23:28:47 -0800 | [diff] [blame] | 225 | void pm8994_reset_configure(uint8_t); |
Vamshi Krishna B V | 82af848 | 2018-03-09 21:02:42 +0530 | [diff] [blame] | 226 | void pm8996_reset_configure(uint8_t, uint8_t); |
Umang Agrawal | 89f6dcb | 2018-01-03 19:07:47 +0530 | [diff] [blame] | 227 | void pmi632_reset_configure(uint8_t); |
Deepa Dinamani | 3c9865d | 2013-03-08 14:03:19 -0800 | [diff] [blame] | 228 | void pm8x41_v2_reset_configure(uint8_t); |
Parth Dixit | 1a963d7 | 2015-10-20 01:08:57 +0530 | [diff] [blame] | 229 | uint8_t pmi8950_get_pmi_subtype(); |
Deepa Dinamani | e69ba61 | 2013-06-03 16:10:09 -0700 | [diff] [blame] | 230 | int pm8x41_ldo_set_voltage(struct pm8x41_ldo *ldo, uint32_t voltage); |
| 231 | int pm8x41_ldo_control(struct pm8x41_ldo *ldo, uint8_t enable); |
Deepa Dinamani | 7564f2a | 2013-02-05 17:55:51 -0800 | [diff] [blame] | 232 | uint8_t pm8x41_get_pmic_rev(); |
sundarajan srinivasan | d0f59e8 | 2013-02-12 19:17:02 -0800 | [diff] [blame] | 233 | uint8_t pm8x41_get_pon_reason(); |
Mayank Grover | 8bf68ac | 2017-12-05 10:27:36 +0530 | [diff] [blame] | 234 | uint8_t pm660_get_pon_reason(); |
Parth Dixit | c2e6dfe | 2015-06-19 15:57:47 +0530 | [diff] [blame] | 235 | uint8_t pm8950_get_pon_reason(); |
Umang Agrawal | fa38b2e | 2018-02-19 15:32:46 +0530 | [diff] [blame] | 236 | uint8_t pmi632_get_pon_reason(); |
Matthew Qin | 5e90d83 | 2014-07-11 11:15:22 +0800 | [diff] [blame] | 237 | uint8_t pm8x41_get_pon_poff_reason1(); |
| 238 | uint8_t pm8x41_get_pon_poff_reason2(); |
Matthew Qin | 3aa8705 | 2014-02-21 10:32:34 +0800 | [diff] [blame] | 239 | uint32_t pm8x41_get_pwrkey_is_pressed(); |
Deepa Dinamani | c342f12 | 2013-06-12 15:41:31 -0700 | [diff] [blame] | 240 | void pm8x41_config_output_mpp(struct pm8x41_mpp *mpp); |
| 241 | void pm8x41_enable_mpp(struct pm8x41_mpp *mpp, enum mpp_en_ctl enable); |
Ajay Singh Parmar | 502ed71 | 2014-07-23 22:58:43 -0700 | [diff] [blame] | 242 | void pm8x41_enable_mvs(struct pm8x41_mvs *mvs, enum mvs_en_ctl enable); |
Ameya Thakur | b0a62ab | 2013-06-25 13:43:10 -0700 | [diff] [blame] | 243 | uint8_t pm8x41_get_is_cold_boot(); |
Mayank Grover | 8bf68ac | 2017-12-05 10:27:36 +0530 | [diff] [blame] | 244 | uint8_t pm660_get_is_cold_boot(); |
Amol Jadi | c3231ff | 2013-07-23 14:35:31 -0700 | [diff] [blame] | 245 | void pm8x41_diff_clock_ctrl(uint8_t enable); |
Xiaocheng Li | 73c5712 | 2013-09-14 17:32:00 +0800 | [diff] [blame] | 246 | void pm8x41_clear_pmic_watchdog(void); |
Channagoud Kadabi | 7ec7a08 | 2014-02-04 15:47:13 -0800 | [diff] [blame] | 247 | void pm8x41_lnbb_clock_ctrl(uint8_t enable); |
Veera Sundaram Sankaran | d322776 | 2014-12-09 11:45:29 -0800 | [diff] [blame] | 248 | void pmi8994_config_mpp_slave_id(uint8_t slave_id); |
| 249 | void pm_pwm_enable(bool enable); |
| 250 | int pm_pwm_config(unsigned int duty_us, unsigned int period_us); |
Channagoud Kadabi | 56a6b52 | 2015-04-24 17:23:27 -0700 | [diff] [blame] | 251 | uint32_t spmi_reg_read(uint32_t slave_id, uint16_t addr, uint8_t *data, uint8_t priority); |
| 252 | uint32_t spmi_reg_write(uint32_t slave_id, uint16_t addr, uint8_t *data, uint8_t priority); |
Kiran Gunda | 1193852 | 2018-10-16 17:54:00 +0530 | [diff] [blame] | 253 | void pm8x41_vib_turn_on(void); |
| 254 | void pm8x41_vib_turn_off(void); |
Deepa Dinamani | 2279965 | 2012-07-21 12:26:22 -0700 | [diff] [blame] | 255 | #endif |