summaryrefslogtreecommitdiff
path: root/firmware/target/arm/s5l8702/ipod6g/adc-6g.c
diff options
context:
space:
mode:
authorCástor Muñoz <cmvidal@gmail.com>2017-03-03 22:46:57 +0100
committerCástor Muñoz <cmvidal@gmail.com>2017-03-03 22:50:38 +0100
commit1ba5ef716d37a9fe7f0863caed2fab8570b2c7c4 (patch)
tree2e209052bc802183b73a705f77ebc552250c9353 /firmware/target/arm/s5l8702/ipod6g/adc-6g.c
parent8ff1b6b6033aad55fadf076f066da5d8b7d2e631 (diff)
downloadrockbox-1ba5ef716d37a9fe7f0863caed2fab8570b2c7c4.tar.gz
rockbox-1ba5ef716d37a9fe7f0863caed2fab8570b2c7c4.zip
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
Diffstat (limited to 'firmware/target/arm/s5l8702/ipod6g/adc-6g.c')
-rw-r--r--firmware/target/arm/s5l8702/ipod6g/adc-6g.c117
1 files changed, 117 insertions, 0 deletions
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 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id: adc-s5l8700.c 21775 2009-07-11 14:12:02Z bertrik $
9 *
10 * Copyright (C) 2009 by Bertrik Sikken
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21
22#include "config.h"
23
24#include "inttypes.h"
25#include "s5l8702.h"
26#include "adc.h"
27#include "adc-target.h"
28#include "pmu-target.h"
29#include "kernel.h"
30
31
32/* MS_TO_TICKS converts a milisecond time period into the
33 * corresponding amount of ticks. If the time period cannot
34 * be accurately measured in ticks it will round up.
35 */
36#define MS_PER_HZ (1000/HZ)
37#define MS_TO_TICKS(x) (((x)+MS_PER_HZ-1)/MS_PER_HZ)
38
39static const struct pmu_adc_channel adc_channels[] =
40{
41 [ADC_BATTERY] =
42 {
43 .name = "Battery",
44 .adcc1 = PCF5063X_ADCC1_MUX_BATSNS_SUBTR
45 | PCF5063X_ADCC1_AVERAGE_4
46 | PCF5063X_ADCC1_RES_10BIT,
47 },
48
49 [ADC_USBDATA] =
50 {
51 .name = "USB D+/D-",
52 .adcc1 = PCF5063X_ADCC1_MUX_ADCIN2_RES
53 | PCF5063X_ADCC1_AVERAGE_16
54 | PCF5063X_ADCC1_RES_10BIT,
55 .adcc3 = PCF5063X_ADCC3_RES_DIV_THREE,
56 },
57
58 [ADC_ACCESSORY] =
59 {
60 .name = "Accessory",
61 .adcc1 = PCF5063X_ADCC1_MUX_ADCIN1
62 | PCF5063X_ADCC1_AVERAGE_16
63 | PCF5063X_ADCC1_RES_10BIT,
64 .adcc2 = PCF5063X_ADCC2_RATIO_ADCIN1
65 | PCF5063X_ADCC2_RATIOSETTL_10US,
66 .adcc3 = PCF5063X_ADCC3_ACCSW_EN,
67 .bias_dly = MS_TO_TICKS(50),
68 },
69};
70
71const char *adc_name(int channel)
72{
73 return adc_channels[channel].name;
74}
75
76unsigned short adc_read_millivolts(int channel)
77{
78 const struct pmu_adc_channel *ch = &adc_channels[channel];
79 return pmu_adc_raw2mv(ch, pmu_read_adc(ch));
80}
81
82/* Returns battery voltage [millivolts] */
83unsigned int adc_read_battery_voltage(void)
84{
85 return adc_read_millivolts(ADC_BATTERY);
86}
87
88/* Returns USB D+/D- voltage from ADC [millivolts] */
89unsigned int adc_read_usbdata_voltage(bool dp)
90{
91 unsigned int mvolts;
92 int gpio = dp ? 0xb0300 : 0xb0200; /* select D+/D- */
93 GPIOCMD = gpio | 0xf; /* route to ADCIN2 */
94 mvolts = adc_read_millivolts(ADC_USBDATA);
95 GPIOCMD = gpio | 0xe; /* unroute */
96 return mvolts;
97}
98
99/* Returns resistor connected to "Accessory identify" pin [ohms] */
100#define IAP_DEVICE_RESISTOR 100000 /* ohms */
101int adc_read_accessory_resistor(void)
102{
103 int raw = pmu_read_adc(&adc_channels[ADC_ACCESSORY]);
104 return (1023-raw) ? raw * IAP_DEVICE_RESISTOR / (1023-raw)
105 : -1 /* open circuit */;
106}
107
108
109/* API functions */
110unsigned short adc_read(int channel)
111{
112 return pmu_read_adc(&adc_channels[channel]);
113}
114
115void adc_init(void)
116{
117}