/*****************************************************************
 *
 * adcapp.c
 * application specific driver header.
 *
 * Author: Rama Rao Bisa <ramab@ami.com>
 *
 * Copyright (C) <2019> <American Megatrends International LLC>
 *
 *****************************************************************/

#ifndef __ADC_H__
#define __ADC_H__

#define READ_ADC_CHANNEL            _IOC(_IOC_WRITE,'K',0x100,0x3FFF)
#define READ_ADC_REF_VOLATGE        _IOC(_IOC_WRITE,'K',0x101,0x3FFF)
#define READ_ADC_RESOLUTION         _IOC(_IOC_WRITE,'K',0x102,0x3FFF)
#define ENABLE_EXT_REF_VOLTAGE      _IOC(_IOC_WRITE,'K',0x103,0x3FFF)
#define DISABLE_EXT_REF_VOLTAGE     _IOC(_IOC_WRITE,'K',0x104,0x3FFF)
#define ENABLE_ADC_CHANNEL          _IOC(_IOC_WRITE,'K',0x105,0x3FFF)
#define DISABLE_ADC_CHANNEL         _IOC(_IOC_WRITE,'K',0x106,0x3FFF)

#define PACKED __attribute__ ((packed))

typedef struct
{
	uint8_t 	channel_num;
	uint16_t	channel_value;

} PACKED get_adc_value_t;
#if 0
typedef struct
{
	int (*adc_read_channel) (uint16_t *adc_value, int channel);
	int (*adc_get_resolution) (uint16_t *adc_resolution);
	int (*adc_get_reference_voltage) (uint16_t *adc_ref_volatge);
	int (*adc_reboot_notifier) (void);
}adc_hal_operations_t;

typedef struct
{
} adc_core_funcs_t;


struct adc_hal
{
	adc_hal_operations_t *padc_hal_ops;
};

struct adc_dev
{
	struct adc_hal *padc_hal;
};
#endif

#endif /* !__ADC_H__ */