diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/plat-s3c/include/plat/adc.h | 3 | ||||
-rw-r--r-- | arch/arm/plat-s3c24xx/adc.c | 11 |
2 files changed, 9 insertions, 5 deletions
diff --git a/arch/arm/plat-s3c/include/plat/adc.h b/arch/arm/plat-s3c/include/plat/adc.h index ef92e50ac0a7..d847bd476b6c 100644 --- a/arch/arm/plat-s3c/include/plat/adc.h +++ b/arch/arm/plat-s3c/include/plat/adc.h | |||
@@ -22,7 +22,8 @@ extern int s3c_adc_start(struct s3c_adc_client *client, | |||
22 | extern struct s3c_adc_client * | 22 | extern struct s3c_adc_client * |
23 | s3c_adc_register(struct platform_device *pdev, | 23 | s3c_adc_register(struct platform_device *pdev, |
24 | void (*select)(unsigned selected), | 24 | void (*select)(unsigned selected), |
25 | void (*conv)(unsigned d0, unsigned d1), | 25 | void (*conv)(unsigned d0, unsigned d1, |
26 | unsigned *samples_left), | ||
26 | unsigned int is_ts); | 27 | unsigned int is_ts); |
27 | 28 | ||
28 | extern void s3c_adc_release(struct s3c_adc_client *client); | 29 | extern void s3c_adc_release(struct s3c_adc_client *client); |
diff --git a/arch/arm/plat-s3c24xx/adc.c b/arch/arm/plat-s3c24xx/adc.c index 91adfa71c172..ee1baf11ad9e 100644 --- a/arch/arm/plat-s3c24xx/adc.c +++ b/arch/arm/plat-s3c24xx/adc.c | |||
@@ -45,7 +45,8 @@ struct s3c_adc_client { | |||
45 | unsigned char channel; | 45 | unsigned char channel; |
46 | 46 | ||
47 | void (*select_cb)(unsigned selected); | 47 | void (*select_cb)(unsigned selected); |
48 | void (*convert_cb)(unsigned val1, unsigned val2); | 48 | void (*convert_cb)(unsigned val1, unsigned val2, |
49 | unsigned *samples_left); | ||
49 | }; | 50 | }; |
50 | 51 | ||
51 | struct adc_device { | 52 | struct adc_device { |
@@ -158,7 +159,8 @@ static void s3c_adc_default_select(unsigned select) | |||
158 | 159 | ||
159 | struct s3c_adc_client *s3c_adc_register(struct platform_device *pdev, | 160 | struct s3c_adc_client *s3c_adc_register(struct platform_device *pdev, |
160 | void (*select)(unsigned int selected), | 161 | void (*select)(unsigned int selected), |
161 | void (*conv)(unsigned d0, unsigned d1), | 162 | void (*conv)(unsigned d0, unsigned d1, |
163 | unsigned *samples_left), | ||
162 | unsigned int is_ts) | 164 | unsigned int is_ts) |
163 | { | 165 | { |
164 | struct s3c_adc_client *client; | 166 | struct s3c_adc_client *client; |
@@ -227,9 +229,10 @@ static irqreturn_t s3c_adc_irq(int irq, void *pw) | |||
227 | data1 = readl(adc->regs + S3C2410_ADCDAT1); | 229 | data1 = readl(adc->regs + S3C2410_ADCDAT1); |
228 | adc_dbg(adc, "read %d: 0x%04x, 0x%04x\n", client->nr_samples, data0, data1); | 230 | adc_dbg(adc, "read %d: 0x%04x, 0x%04x\n", client->nr_samples, data0, data1); |
229 | 231 | ||
230 | (client->convert_cb)(data0 & 0x3ff, data1 & 0x3ff); | 232 | client->nr_samples--; |
233 | (client->convert_cb)(data0 & 0x3ff, data1 & 0x3ff, &client->nr_samples); | ||
231 | 234 | ||
232 | if (--client->nr_samples > 0) { | 235 | if (client->nr_samples > 0) { |
233 | /* fire another conversion for this */ | 236 | /* fire another conversion for this */ |
234 | 237 | ||
235 | client->select_cb(1); | 238 | client->select_cb(1); |