diff options
Diffstat (limited to 'drivers/media/video/s2255drv.c')
-rw-r--r-- | drivers/media/video/s2255drv.c | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/drivers/media/video/s2255drv.c b/drivers/media/video/s2255drv.c index 30f4698be90a..90e1dbc1aa89 100644 --- a/drivers/media/video/s2255drv.c +++ b/drivers/media/video/s2255drv.c | |||
@@ -77,6 +77,8 @@ | |||
77 | #define MAX_CHANNELS 4 | 77 | #define MAX_CHANNELS 4 |
78 | #define S2255_MARKER_FRAME 0x2255DA4AL | 78 | #define S2255_MARKER_FRAME 0x2255DA4AL |
79 | #define S2255_MARKER_RESPONSE 0x2255ACACL | 79 | #define S2255_MARKER_RESPONSE 0x2255ACACL |
80 | #define S2255_RESPONSE_SETMODE 0x01 | ||
81 | #define S2255_RESPONSE_FW 0x10 | ||
80 | #define S2255_USB_XFER_SIZE (16 * 1024) | 82 | #define S2255_USB_XFER_SIZE (16 * 1024) |
81 | #define MAX_CHANNELS 4 | 83 | #define MAX_CHANNELS 4 |
82 | #define MAX_PIPE_BUFFERS 1 | 84 | #define MAX_PIPE_BUFFERS 1 |
@@ -178,9 +180,6 @@ struct s2255_bufferi { | |||
178 | 180 | ||
179 | struct s2255_dmaqueue { | 181 | struct s2255_dmaqueue { |
180 | struct list_head active; | 182 | struct list_head active; |
181 | /* thread for acquisition */ | ||
182 | struct task_struct *kthread; | ||
183 | int frame; | ||
184 | struct s2255_dev *dev; | 183 | struct s2255_dev *dev; |
185 | int channel; | 184 | int channel; |
186 | }; | 185 | }; |
@@ -210,16 +209,11 @@ struct s2255_pipeinfo { | |||
210 | u32 max_transfer_size; | 209 | u32 max_transfer_size; |
211 | u32 cur_transfer_size; | 210 | u32 cur_transfer_size; |
212 | u8 *transfer_buffer; | 211 | u8 *transfer_buffer; |
213 | u32 transfer_flags;; | ||
214 | u32 state; | 212 | u32 state; |
215 | u32 prev_state; | ||
216 | u32 urb_size; | ||
217 | void *stream_urb; | 213 | void *stream_urb; |
218 | void *dev; /* back pointer to s2255_dev struct*/ | 214 | void *dev; /* back pointer to s2255_dev struct*/ |
219 | u32 err_count; | 215 | u32 err_count; |
220 | u32 buf_index; | ||
221 | u32 idx; | 216 | u32 idx; |
222 | u32 priority_set; | ||
223 | }; | 217 | }; |
224 | 218 | ||
225 | struct s2255_fmt; /*forward declaration */ | 219 | struct s2255_fmt; /*forward declaration */ |
@@ -239,8 +233,6 @@ struct s2255_dev { | |||
239 | struct list_head s2255_devlist; | 233 | struct list_head s2255_devlist; |
240 | struct timer_list timer; | 234 | struct timer_list timer; |
241 | struct s2255_fw *fw_data; | 235 | struct s2255_fw *fw_data; |
242 | int board_num; | ||
243 | int is_open; | ||
244 | struct s2255_pipeinfo pipes[MAX_PIPE_BUFFERS]; | 236 | struct s2255_pipeinfo pipes[MAX_PIPE_BUFFERS]; |
245 | struct s2255_bufferi buffer[MAX_CHANNELS]; | 237 | struct s2255_bufferi buffer[MAX_CHANNELS]; |
246 | struct s2255_mode mode[MAX_CHANNELS]; | 238 | struct s2255_mode mode[MAX_CHANNELS]; |
@@ -297,9 +289,10 @@ struct s2255_fh { | |||
297 | int resources[MAX_CHANNELS]; | 289 | int resources[MAX_CHANNELS]; |
298 | }; | 290 | }; |
299 | 291 | ||
300 | #define CUR_USB_FWVER 774 /* current cypress EEPROM firmware version */ | 292 | /* current cypress EEPROM firmware version */ |
293 | #define S2255_CUR_USB_FWVER ((3 << 8) | 6) | ||
301 | #define S2255_MAJOR_VERSION 1 | 294 | #define S2255_MAJOR_VERSION 1 |
302 | #define S2255_MINOR_VERSION 13 | 295 | #define S2255_MINOR_VERSION 14 |
303 | #define S2255_RELEASE 0 | 296 | #define S2255_RELEASE 0 |
304 | #define S2255_VERSION KERNEL_VERSION(S2255_MAJOR_VERSION, \ | 297 | #define S2255_VERSION KERNEL_VERSION(S2255_MAJOR_VERSION, \ |
305 | S2255_MINOR_VERSION, \ | 298 | S2255_MINOR_VERSION, \ |
@@ -1818,7 +1811,6 @@ static int s2255_probe_v4l(struct s2255_dev *dev) | |||
1818 | INIT_LIST_HEAD(&dev->vidq[i].active); | 1811 | INIT_LIST_HEAD(&dev->vidq[i].active); |
1819 | dev->vidq[i].dev = dev; | 1812 | dev->vidq[i].dev = dev; |
1820 | dev->vidq[i].channel = i; | 1813 | dev->vidq[i].channel = i; |
1821 | dev->vidq[i].kthread = NULL; | ||
1822 | /* register 4 video devices */ | 1814 | /* register 4 video devices */ |
1823 | dev->vdev[i] = video_device_alloc(); | 1815 | dev->vdev[i] = video_device_alloc(); |
1824 | memcpy(dev->vdev[i], &template, sizeof(struct video_device)); | 1816 | memcpy(dev->vdev[i], &template, sizeof(struct video_device)); |
@@ -1839,7 +1831,9 @@ static int s2255_probe_v4l(struct s2255_dev *dev) | |||
1839 | return ret; | 1831 | return ret; |
1840 | } | 1832 | } |
1841 | } | 1833 | } |
1842 | printk(KERN_INFO "Sensoray 2255 V4L driver\n"); | 1834 | printk(KERN_INFO "Sensoray 2255 V4L driver Revision: %d.%d\n", |
1835 | S2255_MAJOR_VERSION, | ||
1836 | S2255_MINOR_VERSION); | ||
1843 | return ret; | 1837 | return ret; |
1844 | } | 1838 | } |
1845 | 1839 | ||
@@ -1929,14 +1923,14 @@ static int save_frame(struct s2255_dev *dev, struct s2255_pipeinfo *pipe_info) | |||
1929 | if (!(cc >= 0 && cc < MAX_CHANNELS)) | 1923 | if (!(cc >= 0 && cc < MAX_CHANNELS)) |
1930 | break; | 1924 | break; |
1931 | switch (pdword[2]) { | 1925 | switch (pdword[2]) { |
1932 | case 0x01: | 1926 | case S2255_RESPONSE_SETMODE: |
1933 | /* check if channel valid */ | 1927 | /* check if channel valid */ |
1934 | /* set mode ready */ | 1928 | /* set mode ready */ |
1935 | dev->setmode_ready[cc] = 1; | 1929 | dev->setmode_ready[cc] = 1; |
1936 | wake_up(&dev->wait_setmode[cc]); | 1930 | wake_up(&dev->wait_setmode[cc]); |
1937 | dprintk(5, "setmode ready %d\n", cc); | 1931 | dprintk(5, "setmode ready %d\n", cc); |
1938 | break; | 1932 | break; |
1939 | case 0x10: | 1933 | case S2255_RESPONSE_FW: |
1940 | 1934 | ||
1941 | dev->chn_ready |= (1 << cc); | 1935 | dev->chn_ready |= (1 << cc); |
1942 | if ((dev->chn_ready & 0x0f) != 0x0f) | 1936 | if ((dev->chn_ready & 0x0f) != 0x0f) |
@@ -2172,10 +2166,15 @@ static int s2255_board_init(struct s2255_dev *dev) | |||
2172 | /* query the firmware */ | 2166 | /* query the firmware */ |
2173 | fw_ver = s2255_get_fx2fw(dev); | 2167 | fw_ver = s2255_get_fx2fw(dev); |
2174 | 2168 | ||
2175 | printk(KERN_INFO "2255 usb firmware version %d \n", fw_ver); | 2169 | printk(KERN_INFO "2255 usb firmware version %d.%d\n", |
2176 | if (fw_ver < CUR_USB_FWVER) | 2170 | (fw_ver >> 8) & 0xff, |
2171 | fw_ver & 0xff); | ||
2172 | |||
2173 | if (fw_ver < S2255_CUR_USB_FWVER) | ||
2177 | dev_err(&dev->udev->dev, | 2174 | dev_err(&dev->udev->dev, |
2178 | "usb firmware not up to date %d\n", fw_ver); | 2175 | "usb firmware not up to date %d.%d\n", |
2176 | (fw_ver >> 8) & 0xff, | ||
2177 | fw_ver & 0xff); | ||
2179 | 2178 | ||
2180 | for (j = 0; j < MAX_CHANNELS; j++) { | 2179 | for (j = 0; j < MAX_CHANNELS; j++) { |
2181 | dev->b_acquire[j] = 0; | 2180 | dev->b_acquire[j] = 0; |
@@ -2283,8 +2282,7 @@ static int s2255_start_readpipe(struct s2255_dev *dev) | |||
2283 | 2282 | ||
2284 | for (i = 0; i < MAX_PIPE_BUFFERS; i++) { | 2283 | for (i = 0; i < MAX_PIPE_BUFFERS; i++) { |
2285 | pipe_info->state = 1; | 2284 | pipe_info->state = 1; |
2286 | pipe_info->buf_index = (u32) i; | 2285 | pipe_info->err_count = 0; |
2287 | pipe_info->priority_set = 0; | ||
2288 | pipe_info->stream_urb = usb_alloc_urb(0, GFP_KERNEL); | 2286 | pipe_info->stream_urb = usb_alloc_urb(0, GFP_KERNEL); |
2289 | if (!pipe_info->stream_urb) { | 2287 | if (!pipe_info->stream_urb) { |
2290 | dev_err(&dev->udev->dev, | 2288 | dev_err(&dev->udev->dev, |
@@ -2298,7 +2296,6 @@ static int s2255_start_readpipe(struct s2255_dev *dev) | |||
2298 | pipe_info->cur_transfer_size, | 2296 | pipe_info->cur_transfer_size, |
2299 | read_pipe_completion, pipe_info); | 2297 | read_pipe_completion, pipe_info); |
2300 | 2298 | ||
2301 | pipe_info->urb_size = sizeof(pipe_info->stream_urb); | ||
2302 | dprintk(4, "submitting URB %p\n", pipe_info->stream_urb); | 2299 | dprintk(4, "submitting URB %p\n", pipe_info->stream_urb); |
2303 | retval = usb_submit_urb(pipe_info->stream_urb, GFP_KERNEL); | 2300 | retval = usb_submit_urb(pipe_info->stream_urb, GFP_KERNEL); |
2304 | if (retval) { | 2301 | if (retval) { |
@@ -2403,8 +2400,6 @@ static void s2255_stop_readpipe(struct s2255_dev *dev) | |||
2403 | if (pipe_info->state == 0) | 2400 | if (pipe_info->state == 0) |
2404 | continue; | 2401 | continue; |
2405 | pipe_info->state = 0; | 2402 | pipe_info->state = 0; |
2406 | pipe_info->prev_state = 1; | ||
2407 | |||
2408 | } | 2403 | } |
2409 | } | 2404 | } |
2410 | 2405 | ||
@@ -2542,7 +2537,9 @@ static int s2255_probe(struct usb_interface *interface, | |||
2542 | s2255_probe_v4l(dev); | 2537 | s2255_probe_v4l(dev); |
2543 | usb_reset_device(dev->udev); | 2538 | usb_reset_device(dev->udev); |
2544 | /* load 2255 board specific */ | 2539 | /* load 2255 board specific */ |
2545 | s2255_board_init(dev); | 2540 | retval = s2255_board_init(dev); |
2541 | if (retval) | ||
2542 | goto error; | ||
2546 | 2543 | ||
2547 | dprintk(4, "before probe done %p\n", dev); | 2544 | dprintk(4, "before probe done %p\n", dev); |
2548 | spin_lock_init(&dev->slock); | 2545 | spin_lock_init(&dev->slock); |