diff options
Diffstat (limited to 'drivers/media/video')
-rw-r--r-- | drivers/media/video/ivtv/ivtv-driver.c | 3 | ||||
-rw-r--r-- | drivers/media/video/ivtv/ivtv-driver.h | 2 | ||||
-rw-r--r-- | drivers/media/video/ivtv/ivtv-fileops.c | 4 | ||||
-rw-r--r-- | drivers/media/video/ivtv/ivtv-firmware.c | 17 | ||||
-rw-r--r-- | drivers/media/video/ivtv/ivtv-irq.c | 4 | ||||
-rw-r--r-- | drivers/media/video/ivtv/ivtv-mailbox.c | 19 | ||||
-rw-r--r-- | drivers/media/video/ivtv/ivtv-streams.c | 12 |
7 files changed, 32 insertions, 29 deletions
diff --git a/drivers/media/video/ivtv/ivtv-driver.c b/drivers/media/video/ivtv/ivtv-driver.c index 9e4edb8b7d82..d73d433a4ff6 100644 --- a/drivers/media/video/ivtv/ivtv-driver.c +++ b/drivers/media/video/ivtv/ivtv-driver.c | |||
@@ -275,9 +275,10 @@ int ivtv_waitq(wait_queue_head_t *waitq) | |||
275 | } | 275 | } |
276 | 276 | ||
277 | /* Generic utility functions */ | 277 | /* Generic utility functions */ |
278 | int ivtv_sleep_timeout(int timeout, int intr) | 278 | int ivtv_msleep_timeout(unsigned int msecs, int intr) |
279 | { | 279 | { |
280 | int ret; | 280 | int ret; |
281 | int timeout = msecs_to_jiffies(msecs); | ||
281 | 282 | ||
282 | do { | 283 | do { |
283 | set_current_state(intr ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE); | 284 | set_current_state(intr ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE); |
diff --git a/drivers/media/video/ivtv/ivtv-driver.h b/drivers/media/video/ivtv/ivtv-driver.h index 6c1a85f1ee1b..91b588d261ae 100644 --- a/drivers/media/video/ivtv/ivtv-driver.h +++ b/drivers/media/video/ivtv/ivtv-driver.h | |||
@@ -848,7 +848,7 @@ int ivtv_set_output_mode(struct ivtv *itv, int mode); | |||
848 | struct ivtv_stream *ivtv_get_output_stream(struct ivtv *itv); | 848 | struct ivtv_stream *ivtv_get_output_stream(struct ivtv *itv); |
849 | 849 | ||
850 | /* Return non-zero if a signal is pending */ | 850 | /* Return non-zero if a signal is pending */ |
851 | int ivtv_sleep_timeout(int timeout, int intr); | 851 | int ivtv_msleep_timeout(unsigned int msecs, int intr); |
852 | 852 | ||
853 | /* Wait on queue, returns -EINTR if interrupted */ | 853 | /* Wait on queue, returns -EINTR if interrupted */ |
854 | int ivtv_waitq(wait_queue_head_t *waitq); | 854 | int ivtv_waitq(wait_queue_head_t *waitq); |
diff --git a/drivers/media/video/ivtv/ivtv-fileops.c b/drivers/media/video/ivtv/ivtv-fileops.c index 489fbf25e723..8e97a938398f 100644 --- a/drivers/media/video/ivtv/ivtv-fileops.c +++ b/drivers/media/video/ivtv/ivtv-fileops.c | |||
@@ -218,7 +218,7 @@ static struct ivtv_buffer *ivtv_get_buffer(struct ivtv_stream *s, int non_block, | |||
218 | /* Process pending program info updates and pending VBI data */ | 218 | /* Process pending program info updates and pending VBI data */ |
219 | ivtv_update_pgm_info(itv); | 219 | ivtv_update_pgm_info(itv); |
220 | 220 | ||
221 | if (jiffies - itv->dualwatch_jiffies > HZ) { | 221 | if (jiffies - itv->dualwatch_jiffies > msecs_to_jiffies(1000)) { |
222 | itv->dualwatch_jiffies = jiffies; | 222 | itv->dualwatch_jiffies = jiffies; |
223 | ivtv_dualwatch(itv); | 223 | ivtv_dualwatch(itv); |
224 | } | 224 | } |
@@ -924,7 +924,7 @@ void ivtv_unmute(struct ivtv *itv) | |||
924 | if (atomic_read(&itv->capturing) == 0) | 924 | if (atomic_read(&itv->capturing) == 0) |
925 | ivtv_vapi(itv, CX2341X_ENC_INITIALIZE_INPUT, 0); | 925 | ivtv_vapi(itv, CX2341X_ENC_INITIALIZE_INPUT, 0); |
926 | 926 | ||
927 | ivtv_sleep_timeout(HZ / 10, 0); | 927 | ivtv_msleep_timeout(100, 0); |
928 | 928 | ||
929 | if (atomic_read(&itv->capturing)) { | 929 | if (atomic_read(&itv->capturing)) { |
930 | ivtv_vapi(itv, CX2341X_ENC_MISC, 1, 12); | 930 | ivtv_vapi(itv, CX2341X_ENC_MISC, 1, 12); |
diff --git a/drivers/media/video/ivtv/ivtv-firmware.c b/drivers/media/video/ivtv/ivtv-firmware.c index 5bc45c9f0df2..d0feabf93080 100644 --- a/drivers/media/video/ivtv/ivtv-firmware.c +++ b/drivers/media/video/ivtv/ivtv-firmware.c | |||
@@ -36,7 +36,7 @@ | |||
36 | #define IVTV_CMD_SPU_STOP 0x00000001 | 36 | #define IVTV_CMD_SPU_STOP 0x00000001 |
37 | #define IVTV_CMD_SDRAM_PRECHARGE_INIT 0x0000001A | 37 | #define IVTV_CMD_SDRAM_PRECHARGE_INIT 0x0000001A |
38 | #define IVTV_CMD_SDRAM_REFRESH_INIT 0x80000640 | 38 | #define IVTV_CMD_SDRAM_REFRESH_INIT 0x80000640 |
39 | #define IVTV_SDRAM_SLEEPTIME (60 * HZ / 100) /* 600 ms */ | 39 | #define IVTV_SDRAM_SLEEPTIME 600 |
40 | 40 | ||
41 | #define IVTV_DECODE_INIT_MPEG_FILENAME "v4l-cx2341x-init.mpg" | 41 | #define IVTV_DECODE_INIT_MPEG_FILENAME "v4l-cx2341x-init.mpg" |
42 | #define IVTV_DECODE_INIT_MPEG_SIZE (152*1024) | 42 | #define IVTV_DECODE_INIT_MPEG_SIZE (152*1024) |
@@ -89,7 +89,7 @@ void ivtv_halt_firmware(struct ivtv *itv) | |||
89 | if (itv->enc_mbox.mbox) | 89 | if (itv->enc_mbox.mbox) |
90 | ivtv_vapi(itv, CX2341X_ENC_HALT_FW, 0); | 90 | ivtv_vapi(itv, CX2341X_ENC_HALT_FW, 0); |
91 | 91 | ||
92 | ivtv_sleep_timeout(HZ / 100, 0); | 92 | ivtv_msleep_timeout(10, 0); |
93 | itv->enc_mbox.mbox = itv->dec_mbox.mbox = NULL; | 93 | itv->enc_mbox.mbox = itv->dec_mbox.mbox = NULL; |
94 | 94 | ||
95 | IVTV_DEBUG_INFO("Stopping VDM\n"); | 95 | IVTV_DEBUG_INFO("Stopping VDM\n"); |
@@ -113,7 +113,7 @@ void ivtv_halt_firmware(struct ivtv *itv) | |||
113 | IVTV_DEBUG_INFO("Stopping SPU\n"); | 113 | IVTV_DEBUG_INFO("Stopping SPU\n"); |
114 | write_reg(IVTV_CMD_SPU_STOP, IVTV_REG_SPU); | 114 | write_reg(IVTV_CMD_SPU_STOP, IVTV_REG_SPU); |
115 | 115 | ||
116 | ivtv_sleep_timeout(HZ / 100, 0); | 116 | ivtv_msleep_timeout(10, 0); |
117 | 117 | ||
118 | IVTV_DEBUG_INFO("init Encoder SDRAM pre-charge\n"); | 118 | IVTV_DEBUG_INFO("init Encoder SDRAM pre-charge\n"); |
119 | write_reg(IVTV_CMD_SDRAM_PRECHARGE_INIT, IVTV_REG_ENC_SDRAM_PRECHARGE); | 119 | write_reg(IVTV_CMD_SDRAM_PRECHARGE_INIT, IVTV_REG_ENC_SDRAM_PRECHARGE); |
@@ -129,9 +129,8 @@ void ivtv_halt_firmware(struct ivtv *itv) | |||
129 | write_reg(IVTV_CMD_SDRAM_REFRESH_INIT, IVTV_REG_DEC_SDRAM_REFRESH); | 129 | write_reg(IVTV_CMD_SDRAM_REFRESH_INIT, IVTV_REG_DEC_SDRAM_REFRESH); |
130 | } | 130 | } |
131 | 131 | ||
132 | IVTV_DEBUG_INFO("Sleeping for %dms (600 recommended)\n", | 132 | IVTV_DEBUG_INFO("Sleeping for %dms\n", IVTV_SDRAM_SLEEPTIME); |
133 | (int)(IVTV_SDRAM_SLEEPTIME * 1000 / HZ)); | 133 | ivtv_msleep_timeout(IVTV_SDRAM_SLEEPTIME, 0); |
134 | ivtv_sleep_timeout(IVTV_SDRAM_SLEEPTIME, 0); | ||
135 | } | 134 | } |
136 | 135 | ||
137 | void ivtv_firmware_versions(struct ivtv *itv) | 136 | void ivtv_firmware_versions(struct ivtv *itv) |
@@ -204,12 +203,12 @@ int ivtv_firmware_init(struct ivtv *itv) | |||
204 | 203 | ||
205 | /* start firmware */ | 204 | /* start firmware */ |
206 | write_reg(read_reg(IVTV_REG_SPU) & IVTV_MASK_SPU_ENABLE, IVTV_REG_SPU); | 205 | write_reg(read_reg(IVTV_REG_SPU) & IVTV_MASK_SPU_ENABLE, IVTV_REG_SPU); |
207 | ivtv_sleep_timeout(HZ / 10, 0); | 206 | ivtv_msleep_timeout(100, 0); |
208 | if (itv->has_cx23415) | 207 | if (itv->has_cx23415) |
209 | write_reg(read_reg(IVTV_REG_VPU) & IVTV_MASK_VPU_ENABLE15, IVTV_REG_VPU); | 208 | write_reg(read_reg(IVTV_REG_VPU) & IVTV_MASK_VPU_ENABLE15, IVTV_REG_VPU); |
210 | else | 209 | else |
211 | write_reg(read_reg(IVTV_REG_VPU) & IVTV_MASK_VPU_ENABLE16, IVTV_REG_VPU); | 210 | write_reg(read_reg(IVTV_REG_VPU) & IVTV_MASK_VPU_ENABLE16, IVTV_REG_VPU); |
212 | ivtv_sleep_timeout(HZ / 10, 0); | 211 | ivtv_msleep_timeout(100, 0); |
213 | 212 | ||
214 | /* find mailboxes and ping firmware */ | 213 | /* find mailboxes and ping firmware */ |
215 | itv->enc_mbox.mbox = ivtv_search_mailbox(itv->enc_mem, IVTV_ENCODER_SIZE); | 214 | itv->enc_mbox.mbox = ivtv_search_mailbox(itv->enc_mem, IVTV_ENCODER_SIZE); |
@@ -264,7 +263,7 @@ void ivtv_init_mpeg_decoder(struct ivtv *itv) | |||
264 | IVTV_DECODE_INIT_MPEG_FILENAME); | 263 | IVTV_DECODE_INIT_MPEG_FILENAME); |
265 | } else { | 264 | } else { |
266 | ivtv_vapi(itv, CX2341X_DEC_SCHED_DMA_FROM_HOST, 3, 0, readbytes, 0); | 265 | ivtv_vapi(itv, CX2341X_DEC_SCHED_DMA_FROM_HOST, 3, 0, readbytes, 0); |
267 | ivtv_sleep_timeout(HZ / 10, 0); | 266 | ivtv_msleep_timeout(100, 0); |
268 | } | 267 | } |
269 | ivtv_vapi(itv, CX2341X_DEC_STOP_PLAYBACK, 4, 0, 0, 0, 1); | 268 | ivtv_vapi(itv, CX2341X_DEC_STOP_PLAYBACK, 4, 0, 0, 0, 1); |
270 | } | 269 | } |
diff --git a/drivers/media/video/ivtv/ivtv-irq.c b/drivers/media/video/ivtv/ivtv-irq.c index 1a3ee464a826..14f35df05fa2 100644 --- a/drivers/media/video/ivtv/ivtv-irq.c +++ b/drivers/media/video/ivtv/ivtv-irq.c | |||
@@ -420,7 +420,7 @@ static void ivtv_dma_enc_start(struct ivtv_stream *s) | |||
420 | write_reg_sync(read_reg(IVTV_REG_DMAXFER) | 0x02, IVTV_REG_DMAXFER); | 420 | write_reg_sync(read_reg(IVTV_REG_DMAXFER) | 0x02, IVTV_REG_DMAXFER); |
421 | set_bit(IVTV_F_I_DMA, &itv->i_flags); | 421 | set_bit(IVTV_F_I_DMA, &itv->i_flags); |
422 | itv->cur_dma_stream = s->type; | 422 | itv->cur_dma_stream = s->type; |
423 | itv->dma_timer.expires = jiffies + HZ / 10; | 423 | itv->dma_timer.expires = jiffies + msecs_to_jiffies(100); |
424 | add_timer(&itv->dma_timer); | 424 | add_timer(&itv->dma_timer); |
425 | } | 425 | } |
426 | } | 426 | } |
@@ -437,7 +437,7 @@ static void ivtv_dma_dec_start(struct ivtv_stream *s) | |||
437 | write_reg_sync(read_reg(IVTV_REG_DMAXFER) | 0x01, IVTV_REG_DMAXFER); | 437 | write_reg_sync(read_reg(IVTV_REG_DMAXFER) | 0x01, IVTV_REG_DMAXFER); |
438 | set_bit(IVTV_F_I_DMA, &itv->i_flags); | 438 | set_bit(IVTV_F_I_DMA, &itv->i_flags); |
439 | itv->cur_dma_stream = s->type; | 439 | itv->cur_dma_stream = s->type; |
440 | itv->dma_timer.expires = jiffies + HZ / 10; | 440 | itv->dma_timer.expires = jiffies + msecs_to_jiffies(100); |
441 | add_timer(&itv->dma_timer); | 441 | add_timer(&itv->dma_timer); |
442 | } | 442 | } |
443 | 443 | ||
diff --git a/drivers/media/video/ivtv/ivtv-mailbox.c b/drivers/media/video/ivtv/ivtv-mailbox.c index eaa43e9e9185..814a673712b3 100644 --- a/drivers/media/video/ivtv/ivtv-mailbox.c +++ b/drivers/media/video/ivtv/ivtv-mailbox.c | |||
@@ -176,9 +176,9 @@ static int get_mailbox(struct ivtv *itv, struct ivtv_mailbox_data *mbdata, int f | |||
176 | 176 | ||
177 | /* Sleep before a retry, if not atomic */ | 177 | /* Sleep before a retry, if not atomic */ |
178 | if (!(flags & API_NO_WAIT_MB)) { | 178 | if (!(flags & API_NO_WAIT_MB)) { |
179 | if (jiffies - then > retries * HZ / 100) | 179 | if (jiffies - then > msecs_to_jiffies(10*retries)) |
180 | break; | 180 | break; |
181 | ivtv_sleep_timeout(HZ / 100, 0); | 181 | ivtv_msleep_timeout(10, 0); |
182 | } | 182 | } |
183 | } | 183 | } |
184 | return -ENODEV; | 184 | return -ENODEV; |
@@ -213,7 +213,7 @@ static int ivtv_api_call(struct ivtv *itv, int cmd, int args, u32 data[]) | |||
213 | { | 213 | { |
214 | struct ivtv_mailbox_data *mbdata = (cmd >= 128) ? &itv->enc_mbox : &itv->dec_mbox; | 214 | struct ivtv_mailbox_data *mbdata = (cmd >= 128) ? &itv->enc_mbox : &itv->dec_mbox; |
215 | volatile struct ivtv_mailbox __iomem *mbox; | 215 | volatile struct ivtv_mailbox __iomem *mbox; |
216 | int api_timeout = HZ; | 216 | int api_timeout = msecs_to_jiffies(1000); |
217 | int flags, mb, i; | 217 | int flags, mb, i; |
218 | unsigned long then; | 218 | unsigned long then; |
219 | 219 | ||
@@ -243,7 +243,7 @@ static int ivtv_api_call(struct ivtv *itv, int cmd, int args, u32 data[]) | |||
243 | data, then just return 0 as there is no need to issue this command again. | 243 | data, then just return 0 as there is no need to issue this command again. |
244 | Just an optimization to prevent unnecessary use of mailboxes. */ | 244 | Just an optimization to prevent unnecessary use of mailboxes. */ |
245 | if (itv->api_cache[cmd].last_jiffies && | 245 | if (itv->api_cache[cmd].last_jiffies && |
246 | jiffies - itv->api_cache[cmd].last_jiffies < HZ * 1800 && | 246 | jiffies - itv->api_cache[cmd].last_jiffies < msecs_to_jiffies(1800000) && |
247 | !memcmp(data, itv->api_cache[cmd].data, sizeof(itv->api_cache[cmd].data))) { | 247 | !memcmp(data, itv->api_cache[cmd].data, sizeof(itv->api_cache[cmd].data))) { |
248 | itv->api_cache[cmd].last_jiffies = jiffies; | 248 | itv->api_cache[cmd].last_jiffies = jiffies; |
249 | return 0; | 249 | return 0; |
@@ -268,7 +268,7 @@ static int ivtv_api_call(struct ivtv *itv, int cmd, int args, u32 data[]) | |||
268 | } | 268 | } |
269 | 269 | ||
270 | if ((flags & API_FAST_RESULT) == API_FAST_RESULT) | 270 | if ((flags & API_FAST_RESULT) == API_FAST_RESULT) |
271 | api_timeout = HZ / 10; | 271 | api_timeout = msecs_to_jiffies(100); |
272 | 272 | ||
273 | mb = get_mailbox(itv, mbdata, flags); | 273 | mb = get_mailbox(itv, mbdata, flags); |
274 | if (mb < 0) { | 274 | if (mb < 0) { |
@@ -301,11 +301,12 @@ static int ivtv_api_call(struct ivtv *itv, int cmd, int args, u32 data[]) | |||
301 | if (flags & API_NO_WAIT_RES) | 301 | if (flags & API_NO_WAIT_RES) |
302 | mdelay(1); | 302 | mdelay(1); |
303 | else | 303 | else |
304 | ivtv_sleep_timeout(HZ / 100, 0); | 304 | ivtv_msleep_timeout(10, 0); |
305 | } | 305 | } |
306 | if (jiffies - then > HZ / 10) | 306 | if (jiffies - then > msecs_to_jiffies(100)) |
307 | IVTV_DEBUG_WARN("%s took %lu jiffies (%d per HZ)\n", | 307 | IVTV_DEBUG_WARN("%s took %u jiffies\n", |
308 | api_info[cmd].name, jiffies - then, HZ); | 308 | api_info[cmd].name, |
309 | jiffies_to_msecs(jiffies - then)); | ||
309 | 310 | ||
310 | for (i = 0; i < CX2341X_MBOX_MAX_DATA; i++) | 311 | for (i = 0; i < CX2341X_MBOX_MAX_DATA; i++) |
311 | data[i] = readl(&mbox->data[i]); | 312 | data[i] = readl(&mbox->data[i]); |
diff --git a/drivers/media/video/ivtv/ivtv-streams.c b/drivers/media/video/ivtv/ivtv-streams.c index 287117187499..322b347b67c2 100644 --- a/drivers/media/video/ivtv/ivtv-streams.c +++ b/drivers/media/video/ivtv/ivtv-streams.c | |||
@@ -565,7 +565,7 @@ int ivtv_start_v4l2_encode_stream(struct ivtv_stream *s) | |||
565 | /* Initialize Digitizer for Capture */ | 565 | /* Initialize Digitizer for Capture */ |
566 | ivtv_vapi(itv, CX2341X_ENC_INITIALIZE_INPUT, 0); | 566 | ivtv_vapi(itv, CX2341X_ENC_INITIALIZE_INPUT, 0); |
567 | 567 | ||
568 | ivtv_sleep_timeout(HZ / 10, 0); | 568 | ivtv_msleep_timeout(100, 0); |
569 | } | 569 | } |
570 | 570 | ||
571 | /* begin_capture */ | 571 | /* begin_capture */ |
@@ -781,8 +781,9 @@ int ivtv_stop_v4l2_encode_stream(struct ivtv_stream *s, int gop_end) | |||
781 | set_current_state(TASK_INTERRUPTIBLE); | 781 | set_current_state(TASK_INTERRUPTIBLE); |
782 | 782 | ||
783 | /* wait 2s for EOS interrupt */ | 783 | /* wait 2s for EOS interrupt */ |
784 | while (!test_bit(IVTV_F_I_EOS, &itv->i_flags) && jiffies < then + 2 * HZ) { | 784 | while (!test_bit(IVTV_F_I_EOS, &itv->i_flags) && |
785 | schedule_timeout(HZ / 100); | 785 | jiffies < then + msecs_to_jiffies (2000)) { |
786 | schedule_timeout(msecs_to_jiffies(10)); | ||
786 | } | 787 | } |
787 | 788 | ||
788 | /* To convert jiffies to ms, we must multiply by 1000 | 789 | /* To convert jiffies to ms, we must multiply by 1000 |
@@ -821,7 +822,8 @@ int ivtv_stop_v4l2_encode_stream(struct ivtv_stream *s, int gop_end) | |||
821 | } else if (read_reg(IVTV_REG_DMASTATUS) & 0x02) { | 822 | } else if (read_reg(IVTV_REG_DMASTATUS) & 0x02) { |
822 | break; | 823 | break; |
823 | } | 824 | } |
824 | } while (!ivtv_sleep_timeout(HZ / 100, 1) && then + HZ * 2 > jiffies); | 825 | } while (!ivtv_msleep_timeout(10, 1) && |
826 | then + msecs_to_jiffies(2000) > jiffies); | ||
825 | 827 | ||
826 | set_current_state(TASK_RUNNING); | 828 | set_current_state(TASK_RUNNING); |
827 | remove_wait_queue(&s->waitq, &wait); | 829 | remove_wait_queue(&s->waitq, &wait); |
@@ -892,7 +894,7 @@ int ivtv_stop_v4l2_decode_stream(struct ivtv_stream *s, int flags, u64 pts) | |||
892 | break; | 894 | break; |
893 | tmp = data[3]; | 895 | tmp = data[3]; |
894 | } | 896 | } |
895 | if (ivtv_sleep_timeout(HZ/10, 1)) | 897 | if (ivtv_msleep_timeout(100, 1)) |
896 | break; | 898 | break; |
897 | } | 899 | } |
898 | } | 900 | } |