From 1ba5ef716d37a9fe7f0863caed2fab8570b2c7c4 Mon Sep 17 00:00:00 2001 From: Cástor Muñoz Date: Fri, 3 Mar 2017 22:46:57 +0100 Subject: ipod6g: rename some target files As preparation to add new targets to the s5l8702 directory, rename files as: s5l8702/ipod6g/*-ipod6g.c -> s5l8702/ipod6g/*-6g.c Change-Id: I0cd03d6bcf39b2aa198235f9014cb6948bbafcd5 --- firmware/target/arm/s5l8702/ipod6g/adc-6g.c | 117 ++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 firmware/target/arm/s5l8702/ipod6g/adc-6g.c (limited to 'firmware/target/arm/s5l8702/ipod6g/adc-6g.c') diff --git a/firmware/target/arm/s5l8702/ipod6g/adc-6g.c b/firmware/target/arm/s5l8702/ipod6g/adc-6g.c new file mode 100644 index 0000000000..fbe5ef805e --- /dev/null +++ b/firmware/target/arm/s5l8702/ipod6g/adc-6g.c @@ -0,0 +1,117 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id: adc-s5l8700.c 21775 2009-07-11 14:12:02Z bertrik $ + * + * Copyright (C) 2009 by Bertrik Sikken + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include "config.h" + +#include "inttypes.h" +#include "s5l8702.h" +#include "adc.h" +#include "adc-target.h" +#include "pmu-target.h" +#include "kernel.h" + + +/* MS_TO_TICKS converts a milisecond time period into the + * corresponding amount of ticks. If the time period cannot + * be accurately measured in ticks it will round up. + */ +#define MS_PER_HZ (1000/HZ) +#define MS_TO_TICKS(x) (((x)+MS_PER_HZ-1)/MS_PER_HZ) + +static const struct pmu_adc_channel adc_channels[] = +{ + [ADC_BATTERY] = + { + .name = "Battery", + .adcc1 = PCF5063X_ADCC1_MUX_BATSNS_SUBTR + | PCF5063X_ADCC1_AVERAGE_4 + | PCF5063X_ADCC1_RES_10BIT, + }, + + [ADC_USBDATA] = + { + .name = "USB D+/D-", + .adcc1 = PCF5063X_ADCC1_MUX_ADCIN2_RES + | PCF5063X_ADCC1_AVERAGE_16 + | PCF5063X_ADCC1_RES_10BIT, + .adcc3 = PCF5063X_ADCC3_RES_DIV_THREE, + }, + + [ADC_ACCESSORY] = + { + .name = "Accessory", + .adcc1 = PCF5063X_ADCC1_MUX_ADCIN1 + | PCF5063X_ADCC1_AVERAGE_16 + | PCF5063X_ADCC1_RES_10BIT, + .adcc2 = PCF5063X_ADCC2_RATIO_ADCIN1 + | PCF5063X_ADCC2_RATIOSETTL_10US, + .adcc3 = PCF5063X_ADCC3_ACCSW_EN, + .bias_dly = MS_TO_TICKS(50), + }, +}; + +const char *adc_name(int channel) +{ + return adc_channels[channel].name; +} + +unsigned short adc_read_millivolts(int channel) +{ + const struct pmu_adc_channel *ch = &adc_channels[channel]; + return pmu_adc_raw2mv(ch, pmu_read_adc(ch)); +} + +/* Returns battery voltage [millivolts] */ +unsigned int adc_read_battery_voltage(void) +{ + return adc_read_millivolts(ADC_BATTERY); +} + +/* Returns USB D+/D- voltage from ADC [millivolts] */ +unsigned int adc_read_usbdata_voltage(bool dp) +{ + unsigned int mvolts; + int gpio = dp ? 0xb0300 : 0xb0200; /* select D+/D- */ + GPIOCMD = gpio | 0xf; /* route to ADCIN2 */ + mvolts = adc_read_millivolts(ADC_USBDATA); + GPIOCMD = gpio | 0xe; /* unroute */ + return mvolts; +} + +/* Returns resistor connected to "Accessory identify" pin [ohms] */ +#define IAP_DEVICE_RESISTOR 100000 /* ohms */ +int adc_read_accessory_resistor(void) +{ + int raw = pmu_read_adc(&adc_channels[ADC_ACCESSORY]); + return (1023-raw) ? raw * IAP_DEVICE_RESISTOR / (1023-raw) + : -1 /* open circuit */; +} + + +/* API functions */ +unsigned short adc_read(int channel) +{ + return pmu_read_adc(&adc_channels[channel]); +} + +void adc_init(void) +{ +} -- cgit v1.2.3