at v3.13-rc1 157 lines 4.1 kB view raw
1/* 2 * core.h 3 * 4 * copyright (c) 2011 Samsung Electronics Co., Ltd 5 * http://www.samsung.com 6 * 7 * This program is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU General Public License as published by the 9 * Free Software Foundation; either version 2 of the License, or (at your 10 * option) any later version. 11 * 12 */ 13 14#ifndef __LINUX_MFD_SEC_CORE_H 15#define __LINUX_MFD_SEC_CORE_H 16 17enum sec_device_type { 18 S5M8751X, 19 S5M8763X, 20 S5M8767X, 21 S2MPS11X, 22}; 23 24/** 25 * struct sec_pmic_dev - s5m87xx master device for sub-drivers 26 * @dev: master device of the chip (can be used to access platform data) 27 * @pdata: pointer to private data used to pass platform data to child 28 * @i2c: i2c client private data for regulator 29 * @rtc: i2c client private data for rtc 30 * @iolock: mutex for serializing io access 31 * @irqlock: mutex for buslock 32 * @irq_base: base IRQ number for sec-pmic, required for IRQs 33 * @irq: generic IRQ number for s5m87xx 34 * @ono: power onoff IRQ number for s5m87xx 35 * @irq_masks_cur: currently active value 36 * @irq_masks_cache: cached hardware value 37 * @type: indicate which s5m87xx "variant" is used 38 */ 39struct sec_pmic_dev { 40 struct device *dev; 41 struct sec_platform_data *pdata; 42 struct regmap *regmap; 43 struct i2c_client *i2c; 44 struct i2c_client *rtc; 45 46 int device_type; 47 int irq_base; 48 int irq; 49 struct regmap_irq_chip_data *irq_data; 50 51 int ono; 52 int type; 53 bool wakeup; 54 bool wtsr_smpl; 55}; 56 57int sec_irq_init(struct sec_pmic_dev *sec_pmic); 58void sec_irq_exit(struct sec_pmic_dev *sec_pmic); 59int sec_irq_resume(struct sec_pmic_dev *sec_pmic); 60 61extern int sec_reg_read(struct sec_pmic_dev *sec_pmic, u8 reg, void *dest); 62extern int sec_bulk_read(struct sec_pmic_dev *sec_pmic, u8 reg, int count, u8 *buf); 63extern int sec_reg_write(struct sec_pmic_dev *sec_pmic, u8 reg, u8 value); 64extern int sec_bulk_write(struct sec_pmic_dev *sec_pmic, u8 reg, int count, u8 *buf); 65extern int sec_reg_update(struct sec_pmic_dev *sec_pmic, u8 reg, u8 val, u8 mask); 66 67struct sec_platform_data { 68 struct sec_regulator_data *regulators; 69 struct sec_opmode_data *opmode; 70 int device_type; 71 int num_regulators; 72 73 int irq_base; 74 int (*cfg_pmic_irq)(void); 75 76 int ono; 77 bool wakeup; 78 bool buck_voltage_lock; 79 80 int buck_gpios[3]; 81 int buck_ds[3]; 82 unsigned int buck2_voltage[8]; 83 bool buck2_gpiodvs; 84 unsigned int buck3_voltage[8]; 85 bool buck3_gpiodvs; 86 unsigned int buck4_voltage[8]; 87 bool buck4_gpiodvs; 88 89 int buck_set1; 90 int buck_set2; 91 int buck_set3; 92 int buck2_enable; 93 int buck3_enable; 94 int buck4_enable; 95 int buck_default_idx; 96 int buck2_default_idx; 97 int buck3_default_idx; 98 int buck4_default_idx; 99 100 int buck_ramp_delay; 101 102 int buck2_ramp_delay; 103 int buck34_ramp_delay; 104 int buck5_ramp_delay; 105 int buck16_ramp_delay; 106 int buck7810_ramp_delay; 107 int buck9_ramp_delay; 108 109 bool buck2_ramp_enable; 110 bool buck3_ramp_enable; 111 bool buck4_ramp_enable; 112 bool buck6_ramp_enable; 113 114 int buck2_init; 115 int buck3_init; 116 int buck4_init; 117}; 118 119/** 120 * sec_regulator_data - regulator data 121 * @id: regulator id 122 * @initdata: regulator init data (contraints, supplies, ...) 123 */ 124struct sec_regulator_data { 125 int id; 126 struct regulator_init_data *initdata; 127 struct device_node *reg_node; 128}; 129 130/* 131 * sec_opmode_data - regulator operation mode data 132 * @id: regulator id 133 * @mode: regulator operation mode 134 */ 135struct sec_opmode_data { 136 int id; 137 unsigned int mode; 138}; 139 140/* 141 * samsung regulator operation mode 142 * SEC_OPMODE_OFF Regulator always OFF 143 * SEC_OPMODE_ON Regulator always ON 144 * SEC_OPMODE_LOWPOWER Regulator is on in low-power mode 145 * SEC_OPMODE_SUSPEND Regulator is changed by PWREN pin 146 * If PWREN is high, regulator is on 147 * If PWREN is low, regulator is off 148 */ 149 150enum sec_opmode { 151 SEC_OPMODE_OFF, 152 SEC_OPMODE_ON, 153 SEC_OPMODE_LOWPOWER, 154 SEC_OPMODE_SUSPEND, 155}; 156 157#endif /* __LINUX_MFD_SEC_CORE_H */