Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / include / linux / mfd / da903x.h
diff --git a/kernel/include/linux/mfd/da903x.h b/kernel/include/linux/mfd/da903x.h
new file mode 100644 (file)
index 0000000..0aa3a1a
--- /dev/null
@@ -0,0 +1,247 @@
+#ifndef __LINUX_PMIC_DA903X_H
+#define __LINUX_PMIC_DA903X_H
+
+/* Unified sub device IDs for DA9030/DA9034/DA9035 */
+enum {
+       DA9030_ID_LED_1,
+       DA9030_ID_LED_2,
+       DA9030_ID_LED_3,
+       DA9030_ID_LED_4,
+       DA9030_ID_LED_PC,
+       DA9030_ID_VIBRA,
+       DA9030_ID_WLED,
+       DA9030_ID_BUCK1,
+       DA9030_ID_BUCK2,
+       DA9030_ID_LDO1,
+       DA9030_ID_LDO2,
+       DA9030_ID_LDO3,
+       DA9030_ID_LDO4,
+       DA9030_ID_LDO5,
+       DA9030_ID_LDO6,
+       DA9030_ID_LDO7,
+       DA9030_ID_LDO8,
+       DA9030_ID_LDO9,
+       DA9030_ID_LDO10,
+       DA9030_ID_LDO11,
+       DA9030_ID_LDO12,
+       DA9030_ID_LDO13,
+       DA9030_ID_LDO14,
+       DA9030_ID_LDO15,
+       DA9030_ID_LDO16,
+       DA9030_ID_LDO17,
+       DA9030_ID_LDO18,
+       DA9030_ID_LDO19,
+       DA9030_ID_LDO_INT,      /* LDO Internal */
+       DA9030_ID_BAT,          /* battery charger */
+
+       DA9034_ID_LED_1,
+       DA9034_ID_LED_2,
+       DA9034_ID_VIBRA,
+       DA9034_ID_WLED,
+       DA9034_ID_TOUCH,
+
+       DA9034_ID_BUCK1,
+       DA9034_ID_BUCK2,
+       DA9034_ID_LDO1,
+       DA9034_ID_LDO2,
+       DA9034_ID_LDO3,
+       DA9034_ID_LDO4,
+       DA9034_ID_LDO5,
+       DA9034_ID_LDO6,
+       DA9034_ID_LDO7,
+       DA9034_ID_LDO8,
+       DA9034_ID_LDO9,
+       DA9034_ID_LDO10,
+       DA9034_ID_LDO11,
+       DA9034_ID_LDO12,
+       DA9034_ID_LDO13,
+       DA9034_ID_LDO14,
+       DA9034_ID_LDO15,
+
+       DA9035_ID_BUCK3,
+};
+
+/*
+ * DA9030/DA9034 LEDs sub-devices uses generic "struct led_info"
+ * as the platform_data
+ */
+
+/* DA9030 flags for "struct led_info"
+ */
+#define DA9030_LED_RATE_ON     (0 << 5)
+#define DA9030_LED_RATE_052S   (1 << 5)
+#define DA9030_LED_DUTY_1_16   (0 << 3)
+#define DA9030_LED_DUTY_1_8    (1 << 3)
+#define DA9030_LED_DUTY_1_4    (2 << 3)
+#define DA9030_LED_DUTY_1_2    (3 << 3)
+
+#define DA9030_VIBRA_MODE_1P3V (0 << 1)
+#define DA9030_VIBRA_MODE_2P7V (1 << 1)
+#define DA9030_VIBRA_FREQ_1HZ  (0 << 2)
+#define DA9030_VIBRA_FREQ_2HZ  (1 << 2)
+#define DA9030_VIBRA_FREQ_4HZ  (2 << 2)
+#define DA9030_VIBRA_FREQ_8HZ  (3 << 2)
+#define DA9030_VIBRA_DUTY_ON   (0 << 4)
+#define DA9030_VIBRA_DUTY_75P  (1 << 4)
+#define DA9030_VIBRA_DUTY_50P  (2 << 4)
+#define DA9030_VIBRA_DUTY_25P  (3 << 4)
+
+/* DA9034 flags for "struct led_info" */
+#define DA9034_LED_RAMP                (1 << 7)
+
+/* DA9034 touch screen platform data */
+struct da9034_touch_pdata {
+       int     interval_ms;    /* sampling interval while pen down */
+       int     x_inverted;
+       int     y_inverted;
+};
+
+struct da9034_backlight_pdata {
+       int     output_current; /* output current of WLED, from 0-31 (in mA) */
+};
+
+/* DA9030 battery charger data */
+struct power_supply_info;
+
+struct da9030_battery_info {
+       /* battery parameters */
+       struct power_supply_info *battery_info;
+
+       /* current and voltage to use for battery charging */
+       unsigned int charge_milliamp;
+       unsigned int charge_millivolt;
+
+       /* voltage thresholds (in millivolts) */
+       int vbat_low;
+       int vbat_crit;
+       int vbat_charge_start;
+       int vbat_charge_stop;
+       int vbat_charge_restart;
+
+       /* battery nominal minimal and maximal voltages in millivolts */
+       int vcharge_min;
+       int vcharge_max;
+
+       /* Temperature thresholds. These are DA9030 register values
+          "as is" and should be measured for each battery type */
+       int tbat_low;
+       int tbat_high;
+       int tbat_restart;
+
+
+       /* battery monitor interval (seconds) */
+       unsigned int batmon_interval;
+
+       /* platform callbacks for battery low and critical events */
+       void (*battery_low)(void);
+       void (*battery_critical)(void);
+};
+
+struct da903x_subdev_info {
+       int             id;
+       const char      *name;
+       void            *platform_data;
+};
+
+struct da903x_platform_data {
+       int num_subdevs;
+       struct da903x_subdev_info *subdevs;
+};
+
+/* bit definitions for DA9030 events */
+#define DA9030_EVENT_ONKEY             (1 << 0)
+#define        DA9030_EVENT_PWREN              (1 << 1)
+#define        DA9030_EVENT_EXTON              (1 << 2)
+#define        DA9030_EVENT_CHDET              (1 << 3)
+#define        DA9030_EVENT_TBAT               (1 << 4)
+#define        DA9030_EVENT_VBATMON            (1 << 5)
+#define        DA9030_EVENT_VBATMON_TXON       (1 << 6)
+#define        DA9030_EVENT_CHIOVER            (1 << 7)
+#define        DA9030_EVENT_TCTO               (1 << 8)
+#define        DA9030_EVENT_CCTO               (1 << 9)
+#define        DA9030_EVENT_ADC_READY          (1 << 10)
+#define        DA9030_EVENT_VBUS_4P4           (1 << 11)
+#define        DA9030_EVENT_VBUS_4P0           (1 << 12)
+#define        DA9030_EVENT_SESS_VALID         (1 << 13)
+#define        DA9030_EVENT_SRP_DETECT         (1 << 14)
+#define        DA9030_EVENT_WATCHDOG           (1 << 15)
+#define        DA9030_EVENT_LDO15              (1 << 16)
+#define        DA9030_EVENT_LDO16              (1 << 17)
+#define        DA9030_EVENT_LDO17              (1 << 18)
+#define        DA9030_EVENT_LDO18              (1 << 19)
+#define        DA9030_EVENT_LDO19              (1 << 20)
+#define        DA9030_EVENT_BUCK2              (1 << 21)
+
+/* bit definitions for DA9034 events */
+#define DA9034_EVENT_ONKEY             (1 << 0)
+#define DA9034_EVENT_EXTON             (1 << 2)
+#define DA9034_EVENT_CHDET             (1 << 3)
+#define DA9034_EVENT_TBAT              (1 << 4)
+#define DA9034_EVENT_VBATMON           (1 << 5)
+#define DA9034_EVENT_REV_IOVER         (1 << 6)
+#define DA9034_EVENT_CH_IOVER          (1 << 7)
+#define DA9034_EVENT_CH_TCTO           (1 << 8)
+#define DA9034_EVENT_CH_CCTO           (1 << 9)
+#define DA9034_EVENT_USB_DEV           (1 << 10)
+#define DA9034_EVENT_OTGCP_IOVER       (1 << 11)
+#define DA9034_EVENT_VBUS_4P55         (1 << 12)
+#define DA9034_EVENT_VBUS_3P8          (1 << 13)
+#define DA9034_EVENT_SESS_1P8          (1 << 14)
+#define DA9034_EVENT_SRP_READY         (1 << 15)
+#define DA9034_EVENT_ADC_MAN           (1 << 16)
+#define DA9034_EVENT_ADC_AUTO4         (1 << 17)
+#define DA9034_EVENT_ADC_AUTO5         (1 << 18)
+#define DA9034_EVENT_ADC_AUTO6         (1 << 19)
+#define DA9034_EVENT_PEN_DOWN          (1 << 20)
+#define DA9034_EVENT_TSI_READY         (1 << 21)
+#define DA9034_EVENT_UART_TX           (1 << 22)
+#define DA9034_EVENT_UART_RX           (1 << 23)
+#define DA9034_EVENT_HEADSET           (1 << 25)
+#define DA9034_EVENT_HOOKSWITCH                (1 << 26)
+#define DA9034_EVENT_WATCHDOG          (1 << 27)
+
+extern int da903x_register_notifier(struct device *dev,
+               struct notifier_block *nb, unsigned int events);
+extern int da903x_unregister_notifier(struct device *dev,
+               struct notifier_block *nb, unsigned int events);
+
+/* Status Query Interface */
+#define DA9030_STATUS_ONKEY            (1 << 0)
+#define DA9030_STATUS_PWREN1           (1 << 1)
+#define DA9030_STATUS_EXTON            (1 << 2)
+#define DA9030_STATUS_CHDET            (1 << 3)
+#define DA9030_STATUS_TBAT             (1 << 4)
+#define DA9030_STATUS_VBATMON          (1 << 5)
+#define DA9030_STATUS_VBATMON_TXON     (1 << 6)
+#define DA9030_STATUS_MCLKDET          (1 << 7)
+
+#define DA9034_STATUS_ONKEY            (1 << 0)
+#define DA9034_STATUS_EXTON            (1 << 2)
+#define DA9034_STATUS_CHDET            (1 << 3)
+#define DA9034_STATUS_TBAT             (1 << 4)
+#define DA9034_STATUS_VBATMON          (1 << 5)
+#define DA9034_STATUS_PEN_DOWN         (1 << 6)
+#define DA9034_STATUS_MCLKDET          (1 << 7)
+#define DA9034_STATUS_USB_DEV          (1 << 8)
+#define DA9034_STATUS_HEADSET          (1 << 9)
+#define DA9034_STATUS_HOOKSWITCH       (1 << 10)
+#define DA9034_STATUS_REMCON           (1 << 11)
+#define DA9034_STATUS_VBUS_VALID_4P55  (1 << 12)
+#define DA9034_STATUS_VBUS_VALID_3P8   (1 << 13)
+#define DA9034_STATUS_SESS_VALID_1P8   (1 << 14)
+#define DA9034_STATUS_SRP_READY                (1 << 15)
+
+extern int da903x_query_status(struct device *dev, unsigned int status);
+
+
+/* NOTE: the functions below are not intended for use outside
+ * of the DA903x sub-device drivers
+ */
+extern int da903x_write(struct device *dev, int reg, uint8_t val);
+extern int da903x_writes(struct device *dev, int reg, int len, uint8_t *val);
+extern int da903x_read(struct device *dev, int reg, uint8_t *val);
+extern int da903x_reads(struct device *dev, int reg, int len, uint8_t *val);
+extern int da903x_update(struct device *dev, int reg, uint8_t val, uint8_t mask);
+extern int da903x_set_bits(struct device *dev, int reg, uint8_t bit_mask);
+extern int da903x_clr_bits(struct device *dev, int reg, uint8_t bit_mask);
+#endif /* __LINUX_PMIC_DA903X_H */