summaryrefslogtreecommitdiff
path: root/firmware/target/arm/adc-pp5020.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/adc-pp5020.c')
-rw-r--r--firmware/target/arm/adc-pp5020.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/firmware/target/arm/adc-pp5020.c b/firmware/target/arm/adc-pp5020.c
index e270a41235..851e907246 100644
--- a/firmware/target/arm/adc-pp5020.c
+++ b/firmware/target/arm/adc-pp5020.c
@@ -39,6 +39,9 @@ unsigned short adc_scan(int channel)
39 unsigned int adc_data_1; 39 unsigned int adc_data_1;
40 unsigned int adc_data_2; 40 unsigned int adc_data_2;
41 41
42 if (channel >= NUM_ADC_CHANNELS)
43 return 0;
44
42 /* Start conversion */ 45 /* Start conversion */
43 ADC_ADDR |= 0x80000000; 46 ADC_ADDR |= 0x80000000;
44 47
@@ -56,12 +59,14 @@ unsigned short adc_scan(int channel)
56 59
57 adcdata[channel] = (adc_data_1<<2 | adc_data_2); 60 adcdata[channel] = (adc_data_1<<2 | adc_data_2);
58 61
62#if !defined(PHILIPS_HDD1630)
59 /* ADC values read low if PLL is enabled */ 63 /* ADC values read low if PLL is enabled */
60 if(PLL_CONTROL & 0x80000000){ 64 if(PLL_CONTROL & 0x80000000){
61 adcdata[channel] += 0x14; 65 adcdata[channel] += 0x14;
62 if(adcdata[channel] > 0x400) 66 if(adcdata[channel] > 0x400)
63 adcdata[channel] = 0x400; 67 adcdata[channel] = 0x400;
64 } 68 }
69#endif
65 70
66 return adcdata[channel]; 71 return adcdata[channel];
67} 72}
@@ -89,9 +94,12 @@ static void adc_tick(void)
89/* Figured out from how the OF does things */ 94/* Figured out from how the OF does things */
90void adc_init(void) 95void adc_init(void)
91{ 96{
92 97#if defined(PHILIPS_HDD1630)
98 ADC_INIT = 0;
99#else
93 ADC_INIT |= 1; 100 ADC_INIT |= 1;
94 ADC_INIT |= 0x40000000; 101 ADC_INIT |= 0x40000000;
102#endif
95 udelay(100); 103 udelay(100);
96 104
97 /* Reset ADC */ 105 /* Reset ADC */
@@ -108,13 +116,17 @@ void adc_init(void)
108 ADC_CLOCK_SRC |= 0x3; 116 ADC_CLOCK_SRC |= 0x3;
109 udelay(100); 117 udelay(100);
110 118
119 ADC_ADDR = 0;
111 ADC_ADDR |= 0x40; 120 ADC_ADDR |= 0x40;
121
122#if !defined(PHILIPS_HDD1630)
112 ADC_ADDR |= 0x20000000; 123 ADC_ADDR |= 0x20000000;
113 udelay(100); 124 udelay(100);
114 125
115 ADC_INIT; 126 ADC_INIT;
116 ADC_INIT = 0; 127 ADC_INIT = 0;
117 udelay(100); 128 udelay(100);
129#endif
118 130
119 ADC_STATUS = 0; 131 ADC_STATUS = 0;
120 132
@@ -129,7 +141,7 @@ void adc_init(void)
129 ADC_STATUS |= 0x2000; 141 ADC_STATUS |= 0x2000;
130 142
131#if defined (IRIVER_H10) || defined(IRIVER_H10_5GB) || \ 143#if defined (IRIVER_H10) || defined(IRIVER_H10_5GB) || \
132 defined(MROBE_100) || defined(PHILIPS_HDD1630) 144 defined(MROBE_100)
133 /* Enable channel 2 (H10:remote) */ 145 /* Enable channel 2 (H10:remote) */
134 DEV_INIT1 &=~0x300; 146 DEV_INIT1 &=~0x300;
135 DEV_INIT1 |= 0x100; 147 DEV_INIT1 |= 0x100;
@@ -143,6 +155,12 @@ void adc_init(void)
143 ADC_STATUS |= 0x20000000; 155 ADC_STATUS |= 0x20000000;
144#endif 156#endif
145 157
158#if defined(PHILIPS_HDD1630)
159 ADC_INIT |= 0x80000000;
160 udelay(100);
161 ADC_INIT = 0;
162#endif
163
146 /* Force a scan of all channels to get initial values */ 164 /* Force a scan of all channels to get initial values */
147 adc_scan(0); 165 adc_scan(0);
148 adc_scan(1); 166 adc_scan(1);