]> rtime.felk.cvut.cz Git - hercules2020/nv-tegra/linux-4.4.git/commitdiff
stagging: iio: adc: add as3722 iio support
authorBibek Basu <bbasu@nvidia.com>
Tue, 24 Jun 2014 10:42:03 +0000 (16:12 +0530)
committerDan Willemsen <dwillemsen@nvidia.com>
Wed, 18 Mar 2015 18:58:29 +0000 (11:58 -0700)
Add support for iio to  as3722 adc-extcon driver.
ADC0 will be used by any consumer of iiodev to
get the data via any of the 22 adc channel.

Change-Id: Idca9cc2368d9bd9464906cbafb483f5f7fe9c8cb
Signed-off-by: Bibek Basu <bbasu@nvidia.com>
Reviewed-on: http://git-master/r/428716
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Tested-by: Laxman Dewangan <ldewangan@nvidia.com>
include/linux/mfd/as3722-plat.h
include/linux/mfd/as3722.h

index 701757898a6f7905449d0274d627f8a81e0eaf34..8263b2f50db342ff40c71a5732d39a49fc607de4 100644 (file)
@@ -139,16 +139,28 @@ struct as3722_regulator_platform_data {
 };
 
 /*
- * as3722_adc_extcon_platform_data: ADC platform data.
- * @connection_name: Extcon connection name.
+ * ADC auto conv property: Generate auto conv interrupt when threshold crossed.
+ * @adc_channel_number: ADC channel number for monitoring.
+ * @adc_high_threshold: ADC High raw data for upper threshold to generate int.
+ * @adc_low_threshold: ADC low raw data for lower threshold to generate int.
+ * @adc_shutdown: Shutdown when interrupt generated.
  */
-struct as3722_adc_extcon_platform_data {
-       const char *connection_name;
-       bool enable_adc1_continuous_mode;
-       bool enable_low_voltage_range;
+struct as3722_adc_auto_conv_property {
        int adc_channel;
        int hi_threshold;
        int low_threshold;
+       int auto_conversion_period_ms;
+       const char *connection_name;
+       bool enable_adc1_continuous_mode;
+       bool enable_low_voltage_range;
+};
+
+/*
+ * as3722_adc_extcon_platform_data: ADC platform data.
+ * @auto conv property: Generate auto conv interrupt when threshold crossed.
+ */
+struct as3722_adc_extcon_platform_data {
+       struct as3722_adc_auto_conv_property adc1_auto_conv_data;
 };
 
 struct as3722_platform_data {
index 46771c1e8930c7d212286ab68540bcdda6761323..825e0348f491b31769f68df4243c6c98f62fa42d 100644 (file)
 #define AS3722_INTERRUPT_MASK4_OCCUR_ALARM_SD6         BIT(6)
 #define AS3722_INTERRUPT_MASK4_ADC                     BIT(7)
 
-#define AS3722_ADC1_INTERVAL_TIME                      BIT(0)
-#define AS3722_ADC1_INT_MODE_ON                                BIT(1)
-#define AS3722_ADC_BUF_ON                              BIT(2)
-#define AS3722_ADC1_LOW_VOLTAGE_RANGE                  BIT(5)
-#define AS3722_ADC1_INTEVAL_SCAN                       BIT(6)
-#define AS3722_ADC1_INT_MASK                           BIT(7)
-
-#define AS3722_ADC_MSB_VAL_MASK                                0x7F
-#define AS3722_ADC_LSB_VAL_MASK                                0x07
-
-#define AS3722_ADC0_CONV_START                         BIT(7)
-#define AS3722_ADC0_CONV_NOTREADY                      BIT(7)
-#define AS3722_ADC0_SOURCE_SELECT_MASK                 0x1F
-
-#define AS3722_ADC1_CONV_START                         BIT(7)
-#define AS3722_ADC1_CONV_NOTREADY                      BIT(7)
-#define AS3722_ADC1_SOURCE_SELECT_MASK                 0x1F
+#define AS3722_ADC1_MASK_INTERVAL_TIME                 BIT(0)
+#define AS3722_ADC1_MASK_INT_MODE_ON                   BIT(1)
+#define AS3722_ADC_MASK_BUF_ON                         BIT(2)
+#define AS3722_ADC_MASK_LOW_VOLTAGE_RANGE              BIT(5)
+#define AS3722_ADC1_MASK_INTEVAL_SCAN                  BIT(6)
+#define AS3722_ADC_MASK_CONV_START                     BIT(7)
+#define AS3722_ADC_MASK_CONV_NOTREADY                  BIT(7)
+#define AS3722_ADC_MASK_SOURCE_SELECT                  0x1F
+#define AS3722_ADC_MASK_MSB_VAL                                0x7F
+#define AS3722_ADC_MASK_LSB_VAL                                0x07
 
 /* GPIO modes */
 #define AS3722_GPIO_MODE_MASK                          0x07
@@ -585,4 +578,41 @@ static inline bool as3722_device_rev_eq_later(struct as3722 *as3722,
 
        return true;
 }
+
+/* as3722 adc channel */
+enum {
+       AS3722_ADC_CH_SD0,
+       AS3722_ADC_CH_SD1,
+       AS3722_ADC_CH_SD6,
+       AS3722_ADC_CH_DTEMP,
+       AS3722_ADC_CH_VSUP,
+       AS3722_ADC_CH_GPIO1,
+       AS3722_ADC_CH_GPIO2,
+       AS3722_ADC_CH_GPIO3,
+       AS3722_ADC_CH_GPIO4,
+       AS3722_ADC_CH_GPIO6,
+       AS3722_ADC_CH_GPIO7,
+       AS3722_ADC_CH_VBAT,
+       AS3722_ADC_CH_ADC1,
+       AS3722_ADC_CH_ADC2,
+       AS3722_ADC_CH_TBD1,
+       AS3722_ADC_CH_TBD2,
+       AS3722_ADC_CH_T1SD0,
+       AS3722_ADC_CH_T2SD0,
+       AS3722_ADC_CH_T3SD0,
+       AS3722_ADC_CH_T4SD0,
+       AS3722_ADC_CH_TSD1,
+       AS3722_ADC_CH_T1SD6,
+       AS3722_ADC_CH_T2SD6,
+       AS3722_ADC_CH_MAX,
+};
+
+#define AS3722_DATASHEET_NAME(_name)   "as3722-gpadc-chan-"#_name
+
+#define AS3722_GPADC_IIO_MAP(chan, _consumer, _comsumer_channel_name)  \
+{                                                                      \
+       .adc_channel_label = AS3722_DATASHEET_NAME(chan),               \
+       .consumer_dev_name = _consumer,                                 \
+       .consumer_channel = _comsumer_channel_name,                     \
+}
 #endif /* __LINUX_MFD_AS3722_H__ */