|  | /* Copyright (c) 2010-2011, The Linux Foundation. All rights reserved. | 
|  | * | 
|  | * This program is free software; you can redistribute it and/or modify | 
|  | * it under the terms of the GNU General Public License version 2 and | 
|  | * only version 2 as published by the Free Software Foundation. | 
|  | * | 
|  | * This program is distributed in the hope that it will be useful, | 
|  | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | * GNU General Public License for more details. | 
|  | * | 
|  | * Qualcomm XOADC Driver header file | 
|  | */ | 
|  |  | 
|  | #ifndef _PMIC8058_XOADC_H_ | 
|  | #define _PMIC8058_XOADC_H_ | 
|  |  | 
|  | #include <linux/kernel.h> | 
|  | #include <linux/list.h> | 
|  | #include <linux/workqueue.h> | 
|  |  | 
|  | struct xoadc_conv_state { | 
|  | struct adc_conv_slot	*context; | 
|  | struct list_head	slots; | 
|  | struct mutex		list_lock; | 
|  | }; | 
|  |  | 
|  | #define CHANNEL_VCOIN		0 | 
|  | #define CHANNEL_VBAT		1 | 
|  | #define CHANNEL_VCHG		2 | 
|  | #define CHANNEL_CHG_MONITOR	3 | 
|  | #define CHANNEL_VPH_PWR		4 | 
|  | #define CHANNEL_MPP5		5 | 
|  | #define CHANNEL_MPP6		6 | 
|  | #define CHANNEL_MPP7		7 | 
|  | #define CHANNEL_MPP8		8 | 
|  | #define CHANNEL_MPP9		9 | 
|  | #define CHANNEL_USB_VBUS	0Xa | 
|  | #define CHANNEL_DIE_TEMP	0Xb | 
|  | #define CHANNEL_INTERNAL	0xc | 
|  | #define CHANNEL_125V		0xd | 
|  | #define CHANNEL_INTERNAL_2	0Xe | 
|  | #define CHANNEL_MUXOFF		0xf | 
|  |  | 
|  | #define XOADC_MPP_3		0x2 | 
|  | #define XOADC_MPP_4             0X3 | 
|  | #define XOADC_MPP_5             0x4 | 
|  | #define XOADC_MPP_7             0x6 | 
|  | #define XOADC_MPP_8             0x7 | 
|  | #define XOADC_MPP_10		0X9 | 
|  |  | 
|  | #define XOADC_PMIC_0		0x0 | 
|  |  | 
|  | #define CHANNEL_ADC_625_MV      625 | 
|  |  | 
|  | struct xoadc_platform_data { | 
|  | struct adc_properties *xoadc_prop; | 
|  | u32 (*xoadc_setup) (void); | 
|  | void (*xoadc_shutdown) (void); | 
|  | void (*xoadc_mpp_config) (void); | 
|  | int (*xoadc_vreg_set) (int); | 
|  | int (*xoadc_vreg_setup) (void); | 
|  | void (*xoadc_vreg_shutdown) (void); | 
|  | u32 xoadc_num; | 
|  | u32 xoadc_wakeup; | 
|  | }; | 
|  |  | 
|  | #ifdef CONFIG_PMIC8058_XOADC | 
|  | int32_t pm8058_xoadc_read_adc_code(uint32_t adc_instance, int32_t *data); | 
|  |  | 
|  | int32_t pm8058_xoadc_select_chan_and_start_conv(uint32_t adc_instance, | 
|  | struct adc_conv_slot *slot); | 
|  |  | 
|  | void pm8058_xoadc_slot_request(uint32_t adc_instance, | 
|  | struct adc_conv_slot **slot); | 
|  |  | 
|  | void pm8058_xoadc_restore_slot(uint32_t adc_instance, | 
|  | struct adc_conv_slot *slot); | 
|  |  | 
|  | struct adc_properties *pm8058_xoadc_get_properties(uint32_t dev_instance); | 
|  |  | 
|  | int32_t pm8058_xoadc_calibrate(uint32_t dev_instance, | 
|  | struct adc_conv_slot *slot, int * calib_status); | 
|  |  | 
|  | int32_t pm8058_xoadc_registered(void); | 
|  |  | 
|  | int32_t pm8058_xoadc_calib_device(uint32_t adc_instance); | 
|  |  | 
|  | #ifdef CONFIG_MACH_HTC | 
|  | int32_t pm8058_htc_config_mpp_and_adc_read(int32_t *result, | 
|  | int32_t size, int32_t channels, | 
|  | uint32_t mpp, uint32_t amux); | 
|  | #endif | 
|  | #else | 
|  |  | 
|  | static inline int32_t pm8058_xoadc_read_adc_code(uint32_t adc_instance, | 
|  | int32_t *data) | 
|  | { return -ENXIO; } | 
|  |  | 
|  | static inline int32_t pm8058_xoadc_select_chan_and_start_conv( | 
|  | uint32_t adc_instance, struct adc_conv_slot *slot) | 
|  | { return -ENXIO; } | 
|  |  | 
|  | static inline void pm8058_xoadc_slot_request(uint32_t adc_instance, | 
|  | struct adc_conv_slot **slot) | 
|  | { return; } | 
|  |  | 
|  | static inline void pm8058_xoadc_restore_slot(uint32_t adc_instance, | 
|  | struct adc_conv_slot *slot) | 
|  | { return; } | 
|  |  | 
|  | static inline struct adc_properties *pm8058_xoadc_get_properties( | 
|  | uint32_t dev_instance) | 
|  | { return NULL; } | 
|  |  | 
|  | static inline int32_t pm8058_xoadc_calibrate(uint32_t dev_instance, | 
|  | struct adc_conv_slot *slot, int *calib_status) | 
|  | { return -ENXIO; } | 
|  |  | 
|  | static inline int32_t pm8058_xoadc_registered(void) | 
|  | { return -ENXIO; } | 
|  |  | 
|  | static inline int32_t pm8058_xoadc_calib_device(uint32_t adc_instance) | 
|  | { return -ENXIO; } | 
|  | #ifdef CONFIG_MACH_HTC | 
|  | static inline int32_t pm8058_htc_config_mpp_and_adc_read(int32_t *result, | 
|  | int32_t size, int32_t channels, | 
|  | uint32_t mpp, uint32_t amux) | 
|  | { return -ENXIO; } | 
|  | #endif | 
|  | #endif | 
|  | #endif |