linux/include/linux/mfd/da903x.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __LINUX_PMIC_DA903X_H
   3#define __LINUX_PMIC_DA903X_H
   4
   5/* Unified sub device IDs for DA9030/DA9034/DA9035 */
   6enum {
   7        DA9030_ID_LED_1,
   8        DA9030_ID_LED_2,
   9        DA9030_ID_LED_3,
  10        DA9030_ID_LED_4,
  11        DA9030_ID_LED_PC,
  12        DA9030_ID_VIBRA,
  13        DA9030_ID_WLED,
  14        DA9030_ID_BUCK1,
  15        DA9030_ID_BUCK2,
  16        DA9030_ID_LDO1,
  17        DA9030_ID_LDO2,
  18        DA9030_ID_LDO3,
  19        DA9030_ID_LDO4,
  20        DA9030_ID_LDO5,
  21        DA9030_ID_LDO6,
  22        DA9030_ID_LDO7,
  23        DA9030_ID_LDO8,
  24        DA9030_ID_LDO9,
  25        DA9030_ID_LDO10,
  26        DA9030_ID_LDO11,
  27        DA9030_ID_LDO12,
  28        DA9030_ID_LDO13,
  29        DA9030_ID_LDO14,
  30        DA9030_ID_LDO15,
  31        DA9030_ID_LDO16,
  32        DA9030_ID_LDO17,
  33        DA9030_ID_LDO18,
  34        DA9030_ID_LDO19,
  35        DA9030_ID_LDO_INT,      /* LDO Internal */
  36        DA9030_ID_BAT,          /* battery charger */
  37
  38        DA9034_ID_LED_1,
  39        DA9034_ID_LED_2,
  40        DA9034_ID_VIBRA,
  41        DA9034_ID_WLED,
  42        DA9034_ID_TOUCH,
  43
  44        DA9034_ID_BUCK1,
  45        DA9034_ID_BUCK2,
  46        DA9034_ID_LDO1,
  47        DA9034_ID_LDO2,
  48        DA9034_ID_LDO3,
  49        DA9034_ID_LDO4,
  50        DA9034_ID_LDO5,
  51        DA9034_ID_LDO6,
  52        DA9034_ID_LDO7,
  53        DA9034_ID_LDO8,
  54        DA9034_ID_LDO9,
  55        DA9034_ID_LDO10,
  56        DA9034_ID_LDO11,
  57        DA9034_ID_LDO12,
  58        DA9034_ID_LDO13,
  59        DA9034_ID_LDO14,
  60        DA9034_ID_LDO15,
  61
  62        DA9035_ID_BUCK3,
  63};
  64
  65/*
  66 * DA9030/DA9034 LEDs sub-devices uses generic "struct led_info"
  67 * as the platform_data
  68 */
  69
  70/* DA9030 flags for "struct led_info"
  71 */
  72#define DA9030_LED_RATE_ON      (0 << 5)
  73#define DA9030_LED_RATE_052S    (1 << 5)
  74#define DA9030_LED_DUTY_1_16    (0 << 3)
  75#define DA9030_LED_DUTY_1_8     (1 << 3)
  76#define DA9030_LED_DUTY_1_4     (2 << 3)
  77#define DA9030_LED_DUTY_1_2     (3 << 3)
  78
  79#define DA9030_VIBRA_MODE_1P3V  (0 << 1)
  80#define DA9030_VIBRA_MODE_2P7V  (1 << 1)
  81#define DA9030_VIBRA_FREQ_1HZ   (0 << 2)
  82#define DA9030_VIBRA_FREQ_2HZ   (1 << 2)
  83#define DA9030_VIBRA_FREQ_4HZ   (2 << 2)
  84#define DA9030_VIBRA_FREQ_8HZ   (3 << 2)
  85#define DA9030_VIBRA_DUTY_ON    (0 << 4)
  86#define DA9030_VIBRA_DUTY_75P   (1 << 4)
  87#define DA9030_VIBRA_DUTY_50P   (2 << 4)
  88#define DA9030_VIBRA_DUTY_25P   (3 << 4)
  89
  90/* DA9034 flags for "struct led_info" */
  91#define DA9034_LED_RAMP         (1 << 7)
  92
  93/* DA9034 touch screen platform data */
  94struct da9034_touch_pdata {
  95        int     interval_ms;    /* sampling interval while pen down */
  96        int     x_inverted;
  97        int     y_inverted;
  98};
  99
 100struct da9034_backlight_pdata {
 101        int     output_current; /* output current of WLED, from 0-31 (in mA) */
 102};
 103
 104/* DA9030 battery charger data */
 105struct power_supply_info;
 106
 107struct da9030_battery_info {
 108        /* battery parameters */
 109        struct power_supply_info *battery_info;
 110
 111        /* current and voltage to use for battery charging */
 112        unsigned int charge_milliamp;
 113        unsigned int charge_millivolt;
 114
 115        /* voltage thresholds (in millivolts) */
 116        int vbat_low;
 117        int vbat_crit;
 118        int vbat_charge_start;
 119        int vbat_charge_stop;
 120        int vbat_charge_restart;
 121
 122        /* battery nominal minimal and maximal voltages in millivolts */
 123        int vcharge_min;
 124        int vcharge_max;
 125
 126        /* Temperature thresholds. These are DA9030 register values
 127           "as is" and should be measured for each battery type */
 128        int tbat_low;
 129        int tbat_high;
 130        int tbat_restart;
 131
 132
 133        /* battery monitor interval (seconds) */
 134        unsigned int batmon_interval;
 135
 136        /* platform callbacks for battery low and critical events */
 137        void (*battery_low)(void);
 138        void (*battery_critical)(void);
 139};
 140
 141struct da903x_subdev_info {
 142        int             id;
 143        const char      *name;
 144        void            *platform_data;
 145};
 146
 147struct da903x_platform_data {
 148        int num_subdevs;
 149        struct da903x_subdev_info *subdevs;
 150};
 151
 152/* bit definitions for DA9030 events */
 153#define DA9030_EVENT_ONKEY              (1 << 0)
 154#define DA9030_EVENT_PWREN              (1 << 1)
 155#define DA9030_EVENT_EXTON              (1 << 2)
 156#define DA9030_EVENT_CHDET              (1 << 3)
 157#define DA9030_EVENT_TBAT               (1 << 4)
 158#define DA9030_EVENT_VBATMON            (1 << 5)
 159#define DA9030_EVENT_VBATMON_TXON       (1 << 6)
 160#define DA9030_EVENT_CHIOVER            (1 << 7)
 161#define DA9030_EVENT_TCTO               (1 << 8)
 162#define DA9030_EVENT_CCTO               (1 << 9)
 163#define DA9030_EVENT_ADC_READY          (1 << 10)
 164#define DA9030_EVENT_VBUS_4P4           (1 << 11)
 165#define DA9030_EVENT_VBUS_4P0           (1 << 12)
 166#define DA9030_EVENT_SESS_VALID         (1 << 13)
 167#define DA9030_EVENT_SRP_DETECT         (1 << 14)
 168#define DA9030_EVENT_WATCHDOG           (1 << 15)
 169#define DA9030_EVENT_LDO15              (1 << 16)
 170#define DA9030_EVENT_LDO16              (1 << 17)
 171#define DA9030_EVENT_LDO17              (1 << 18)
 172#define DA9030_EVENT_LDO18              (1 << 19)
 173#define DA9030_EVENT_LDO19              (1 << 20)
 174#define DA9030_EVENT_BUCK2              (1 << 21)
 175
 176/* bit definitions for DA9034 events */
 177#define DA9034_EVENT_ONKEY              (1 << 0)
 178#define DA9034_EVENT_EXTON              (1 << 2)
 179#define DA9034_EVENT_CHDET              (1 << 3)
 180#define DA9034_EVENT_TBAT               (1 << 4)
 181#define DA9034_EVENT_VBATMON            (1 << 5)
 182#define DA9034_EVENT_REV_IOVER          (1 << 6)
 183#define DA9034_EVENT_CH_IOVER           (1 << 7)
 184#define DA9034_EVENT_CH_TCTO            (1 << 8)
 185#define DA9034_EVENT_CH_CCTO            (1 << 9)
 186#define DA9034_EVENT_USB_DEV            (1 << 10)
 187#define DA9034_EVENT_OTGCP_IOVER        (1 << 11)
 188#define DA9034_EVENT_VBUS_4P55          (1 << 12)
 189#define DA9034_EVENT_VBUS_3P8           (1 << 13)
 190#define DA9034_EVENT_SESS_1P8           (1 << 14)
 191#define DA9034_EVENT_SRP_READY          (1 << 15)
 192#define DA9034_EVENT_ADC_MAN            (1 << 16)
 193#define DA9034_EVENT_ADC_AUTO4          (1 << 17)
 194#define DA9034_EVENT_ADC_AUTO5          (1 << 18)
 195#define DA9034_EVENT_ADC_AUTO6          (1 << 19)
 196#define DA9034_EVENT_PEN_DOWN           (1 << 20)
 197#define DA9034_EVENT_TSI_READY          (1 << 21)
 198#define DA9034_EVENT_UART_TX            (1 << 22)
 199#define DA9034_EVENT_UART_RX            (1 << 23)
 200#define DA9034_EVENT_HEADSET            (1 << 25)
 201#define DA9034_EVENT_HOOKSWITCH         (1 << 26)
 202#define DA9034_EVENT_WATCHDOG           (1 << 27)
 203
 204extern int da903x_register_notifier(struct device *dev,
 205                struct notifier_block *nb, unsigned int events);
 206extern int da903x_unregister_notifier(struct device *dev,
 207                struct notifier_block *nb, unsigned int events);
 208
 209/* Status Query Interface */
 210#define DA9030_STATUS_ONKEY             (1 << 0)
 211#define DA9030_STATUS_PWREN1            (1 << 1)
 212#define DA9030_STATUS_EXTON             (1 << 2)
 213#define DA9030_STATUS_CHDET             (1 << 3)
 214#define DA9030_STATUS_TBAT              (1 << 4)
 215#define DA9030_STATUS_VBATMON           (1 << 5)
 216#define DA9030_STATUS_VBATMON_TXON      (1 << 6)
 217#define DA9030_STATUS_MCLKDET           (1 << 7)
 218
 219#define DA9034_STATUS_ONKEY             (1 << 0)
 220#define DA9034_STATUS_EXTON             (1 << 2)
 221#define DA9034_STATUS_CHDET             (1 << 3)
 222#define DA9034_STATUS_TBAT              (1 << 4)
 223#define DA9034_STATUS_VBATMON           (1 << 5)
 224#define DA9034_STATUS_PEN_DOWN          (1 << 6)
 225#define DA9034_STATUS_MCLKDET           (1 << 7)
 226#define DA9034_STATUS_USB_DEV           (1 << 8)
 227#define DA9034_STATUS_HEADSET           (1 << 9)
 228#define DA9034_STATUS_HOOKSWITCH        (1 << 10)
 229#define DA9034_STATUS_REMCON            (1 << 11)
 230#define DA9034_STATUS_VBUS_VALID_4P55   (1 << 12)
 231#define DA9034_STATUS_VBUS_VALID_3P8    (1 << 13)
 232#define DA9034_STATUS_SESS_VALID_1P8    (1 << 14)
 233#define DA9034_STATUS_SRP_READY         (1 << 15)
 234
 235extern int da903x_query_status(struct device *dev, unsigned int status);
 236
 237
 238/* NOTE: the functions below are not intended for use outside
 239 * of the DA903x sub-device drivers
 240 */
 241extern int da903x_write(struct device *dev, int reg, uint8_t val);
 242extern int da903x_writes(struct device *dev, int reg, int len, uint8_t *val);
 243extern int da903x_read(struct device *dev, int reg, uint8_t *val);
 244extern int da903x_reads(struct device *dev, int reg, int len, uint8_t *val);
 245extern int da903x_update(struct device *dev, int reg, uint8_t val, uint8_t mask);
 246extern int da903x_set_bits(struct device *dev, int reg, uint8_t bit_mask);
 247extern int da903x_clr_bits(struct device *dev, int reg, uint8_t bit_mask);
 248#endif /* __LINUX_PMIC_DA903X_H */
 249