aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video')
-rw-r--r--drivers/media/video/em28xx/em28xx-cards.c44
-rw-r--r--drivers/media/video/em28xx/em28xx-core.c8
-rw-r--r--drivers/media/video/em28xx/em28xx-dvb.c4
-rw-r--r--drivers/media/video/em28xx/em28xx-i2c.c6
-rw-r--r--drivers/media/video/em28xx/em28xx-input.c4
-rw-r--r--drivers/media/video/em28xx/em28xx-video.c18
-rw-r--r--drivers/media/video/em28xx/em28xx.h21
7 files changed, 43 insertions, 62 deletions
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c
index 0d489cad2d56..11308ebd18a0 100644
--- a/drivers/media/video/em28xx/em28xx-cards.c
+++ b/drivers/media/video/em28xx/em28xx-cards.c
@@ -1262,19 +1262,9 @@ int em28xx_tuner_callback(void *ptr, int component, int command, int arg)
1262} 1262}
1263EXPORT_SYMBOL_GPL(em28xx_tuner_callback); 1263EXPORT_SYMBOL_GPL(em28xx_tuner_callback);
1264 1264
1265static void em28xx_set_model(struct em28xx *dev) 1265static void inline em28xx_set_model(struct em28xx *dev)
1266{ 1266{
1267 dev->is_em2800 = em28xx_boards[dev->model].is_em2800; 1267 memcpy(&dev->board, &em28xx_boards[dev->model], sizeof(dev->board));
1268 dev->has_msp34xx = em28xx_boards[dev->model].has_msp34xx;
1269 dev->tda9887_conf = em28xx_boards[dev->model].tda9887_conf;
1270 dev->decoder = em28xx_boards[dev->model].decoder;
1271 dev->xclk = em28xx_boards[dev->model].xclk;
1272 dev->i2c_speed = em28xx_boards[dev->model].i2c_speed;
1273 dev->max_range_640_480 = em28xx_boards[dev->model].max_range_640_480;
1274 dev->has_dvb = em28xx_boards[dev->model].has_dvb;
1275 dev->has_snapshot_button = em28xx_boards[dev->model].has_snapshot_button;
1276 dev->ir_codes = em28xx_boards[dev->model].ir_codes;
1277 dev->valid = em28xx_boards[dev->model].valid;
1278} 1268}
1279 1269
1280/* Since em28xx_pre_card_setup() requires a proper dev->model, 1270/* Since em28xx_pre_card_setup() requires a proper dev->model,
@@ -1331,16 +1321,16 @@ void em28xx_pre_card_setup(struct em28xx *dev)
1331 /* Those are the default values for the majority of boards 1321 /* Those are the default values for the majority of boards
1332 Use those values if not specified otherwise at boards entry 1322 Use those values if not specified otherwise at boards entry
1333 */ 1323 */
1334 if (!dev->xclk) 1324 if (!dev->board.xclk)
1335 dev->xclk = EM28XX_XCLK_IR_RC5_MODE | 1325 dev->board.xclk = EM28XX_XCLK_IR_RC5_MODE |
1336 EM28XX_XCLK_FREQUENCY_12MHZ; 1326 EM28XX_XCLK_FREQUENCY_12MHZ;
1337 1327
1338 if (!dev->i2c_speed) 1328 if (!dev->board.i2c_speed)
1339 dev->i2c_speed = EM28XX_I2C_CLK_WAIT_ENABLE | 1329 dev->board.i2c_speed = EM28XX_I2C_CLK_WAIT_ENABLE |
1340 EM28XX_I2C_FREQ_100_KHZ; 1330 EM28XX_I2C_FREQ_100_KHZ;
1341 1331
1342 em28xx_write_reg(dev, EM28XX_R0F_XCLK, dev->xclk & 0x7f); 1332 em28xx_write_reg(dev, EM28XX_R0F_XCLK, dev->board.xclk & 0x7f);
1343 em28xx_write_reg(dev, EM28XX_R06_I2C_CLK, dev->i2c_speed); 1333 em28xx_write_reg(dev, EM28XX_R06_I2C_CLK, dev->board.i2c_speed);
1344 msleep(50); 1334 msleep(50);
1345 1335
1346 /* request some modules */ 1336 /* request some modules */
@@ -1694,7 +1684,7 @@ void em28xx_card_setup(struct em28xx *dev)
1694 1684
1695 if (tv.audio_processor == V4L2_IDENT_MSPX4XX) { 1685 if (tv.audio_processor == V4L2_IDENT_MSPX4XX) {
1696 dev->i2s_speed = 2048000; 1686 dev->i2s_speed = 2048000;
1697 dev->has_msp34xx = 1; 1687 dev->board.has_msp34xx = 1;
1698 } 1688 }
1699#ifdef CONFIG_MODULES 1689#ifdef CONFIG_MODULES
1700 if (tv.has_ir) 1690 if (tv.has_ir)
@@ -1727,10 +1717,10 @@ void em28xx_card_setup(struct em28xx *dev)
1727 break; 1717 break;
1728 } 1718 }
1729 1719
1730 if (dev->has_snapshot_button) 1720 if (dev->board.has_snapshot_button)
1731 em28xx_register_snapshot_button(dev); 1721 em28xx_register_snapshot_button(dev);
1732 1722
1733 if (dev->valid == EM28XX_BOARD_NOT_VALIDATED) { 1723 if (dev->board.valid == EM28XX_BOARD_NOT_VALIDATED) {
1734 em28xx_errdev("\n\n"); 1724 em28xx_errdev("\n\n");
1735 em28xx_errdev("The support for this board weren't " 1725 em28xx_errdev("The support for this board weren't "
1736 "valid yet.\n"); 1726 "valid yet.\n");
@@ -1745,13 +1735,13 @@ void em28xx_card_setup(struct em28xx *dev)
1745 1735
1746#ifdef CONFIG_MODULES 1736#ifdef CONFIG_MODULES
1747 /* request some modules */ 1737 /* request some modules */
1748 if (dev->has_msp34xx) 1738 if (dev->board.has_msp34xx)
1749 request_module("msp3400"); 1739 request_module("msp3400");
1750 if (dev->decoder == EM28XX_SAA7113 || dev->decoder == EM28XX_SAA7114) 1740 if (dev->board.decoder == EM28XX_SAA7113 || dev->board.decoder == EM28XX_SAA7114)
1751 request_module("saa7115"); 1741 request_module("saa7115");
1752 if (dev->decoder == EM28XX_TVP5150) 1742 if (dev->board.decoder == EM28XX_TVP5150)
1753 request_module("tvp5150"); 1743 request_module("tvp5150");
1754 if (dev->tuner_type != TUNER_ABSENT) 1744 if (dev->board.tuner_type != TUNER_ABSENT)
1755 request_module("tuner"); 1745 request_module("tuner");
1756#endif 1746#endif
1757 1747
diff --git a/drivers/media/video/em28xx/em28xx-core.c b/drivers/media/video/em28xx/em28xx-core.c
index 53c7252416f0..164f9b3d0a91 100644
--- a/drivers/media/video/em28xx/em28xx-core.c
+++ b/drivers/media/video/em28xx/em28xx-core.c
@@ -349,7 +349,7 @@ static int em28xx_set_audio_source(struct em28xx *dev)
349 int ret; 349 int ret;
350 u8 input; 350 u8 input;
351 351
352 if (dev->is_em2800) { 352 if (dev->board.is_em2800) {
353 if (dev->ctl_ainput == EM28XX_AMUX_VIDEO) 353 if (dev->ctl_ainput == EM28XX_AMUX_VIDEO)
354 input = EM2800_AUDIO_SRC_TUNER; 354 input = EM2800_AUDIO_SRC_TUNER;
355 else 355 else
@@ -360,7 +360,7 @@ static int em28xx_set_audio_source(struct em28xx *dev)
360 return ret; 360 return ret;
361 } 361 }
362 362
363 if (dev->has_msp34xx) 363 if (dev->board.has_msp34xx)
364 input = EM28XX_AUDIO_SRC_TUNER; 364 input = EM28XX_AUDIO_SRC_TUNER;
365 else { 365 else {
366 switch (dev->ctl_ainput) { 366 switch (dev->ctl_ainput) {
@@ -417,7 +417,7 @@ int em28xx_audio_analog_set(struct em28xx *dev)
417 } 417 }
418 } 418 }
419 419
420 xclk = dev->xclk & 0x7f; 420 xclk = dev->board.xclk & 0x7f;
421 if (!dev->mute) 421 if (!dev->mute)
422 xclk |= 0x80; 422 xclk |= 0x80;
423 423
@@ -658,7 +658,7 @@ static int em28xx_scaler_set(struct em28xx *dev, u16 h, u16 v)
658{ 658{
659 u8 mode; 659 u8 mode;
660 /* the em2800 scaler only supports scaling down to 50% */ 660 /* the em2800 scaler only supports scaling down to 50% */
661 if (dev->is_em2800) 661 if (dev->board.is_em2800)
662 mode = (v ? 0x20 : 0x00) | (h ? 0x10 : 0x00); 662 mode = (v ? 0x20 : 0x00) | (h ? 0x10 : 0x00);
663 else { 663 else {
664 u8 buf[2]; 664 u8 buf[2];
diff --git a/drivers/media/video/em28xx/em28xx-dvb.c b/drivers/media/video/em28xx/em28xx-dvb.c
index c99e2383b7ec..09c15cc088a6 100644
--- a/drivers/media/video/em28xx/em28xx-dvb.c
+++ b/drivers/media/video/em28xx/em28xx-dvb.c
@@ -393,7 +393,7 @@ static int dvb_init(struct em28xx *dev)
393 int result = 0; 393 int result = 0;
394 struct em28xx_dvb *dvb; 394 struct em28xx_dvb *dvb;
395 395
396 if (!dev->has_dvb) { 396 if (!dev->board.has_dvb) {
397 /* This device does not support the extension */ 397 /* This device does not support the extension */
398 return 0; 398 return 0;
399 } 399 }
@@ -479,7 +479,7 @@ out_free:
479 479
480static int dvb_fini(struct em28xx *dev) 480static int dvb_fini(struct em28xx *dev)
481{ 481{
482 if (!dev->has_dvb) { 482 if (!dev->board.has_dvb) {
483 /* This device does not support the extension */ 483 /* This device does not support the extension */
484 return 0; 484 return 0;
485 } 485 }
diff --git a/drivers/media/video/em28xx/em28xx-i2c.c b/drivers/media/video/em28xx/em28xx-i2c.c
index ec3e3b157ba8..78d60231ee3f 100644
--- a/drivers/media/video/em28xx/em28xx-i2c.c
+++ b/drivers/media/video/em28xx/em28xx-i2c.c
@@ -250,7 +250,7 @@ static int em28xx_i2c_xfer(struct i2c_adapter *i2c_adap,
250 (msgs[i].flags & I2C_M_RD) ? "read" : "write", 250 (msgs[i].flags & I2C_M_RD) ? "read" : "write",
251 i == num - 1 ? "stop" : "nonstop", addr, msgs[i].len); 251 i == num - 1 ? "stop" : "nonstop", addr, msgs[i].len);
252 if (!msgs[i].len) { /* no len: check only for device presence */ 252 if (!msgs[i].len) { /* no len: check only for device presence */
253 if (dev->is_em2800) 253 if (dev->board.is_em2800)
254 rc = em2800_i2c_check_for_device(dev, addr); 254 rc = em2800_i2c_check_for_device(dev, addr);
255 else 255 else
256 rc = em28xx_i2c_check_for_device(dev, addr); 256 rc = em28xx_i2c_check_for_device(dev, addr);
@@ -261,7 +261,7 @@ static int em28xx_i2c_xfer(struct i2c_adapter *i2c_adap,
261 261
262 } else if (msgs[i].flags & I2C_M_RD) { 262 } else if (msgs[i].flags & I2C_M_RD) {
263 /* read bytes */ 263 /* read bytes */
264 if (dev->is_em2800) 264 if (dev->board.is_em2800)
265 rc = em2800_i2c_recv_bytes(dev, addr, 265 rc = em2800_i2c_recv_bytes(dev, addr,
266 msgs[i].buf, 266 msgs[i].buf,
267 msgs[i].len); 267 msgs[i].len);
@@ -279,7 +279,7 @@ static int em28xx_i2c_xfer(struct i2c_adapter *i2c_adap,
279 for (byte = 0; byte < msgs[i].len; byte++) 279 for (byte = 0; byte < msgs[i].len; byte++)
280 printk(" %02x", msgs[i].buf[byte]); 280 printk(" %02x", msgs[i].buf[byte]);
281 } 281 }
282 if (dev->is_em2800) 282 if (dev->board.is_em2800)
283 rc = em2800_i2c_send_bytes(dev, addr, 283 rc = em2800_i2c_send_bytes(dev, addr,
284 msgs[i].buf, 284 msgs[i].buf,
285 msgs[i].len); 285 msgs[i].len);
diff --git a/drivers/media/video/em28xx/em28xx-input.c b/drivers/media/video/em28xx/em28xx-input.c
index 07edd4067acc..42bbaf64aceb 100644
--- a/drivers/media/video/em28xx/em28xx-input.c
+++ b/drivers/media/video/em28xx/em28xx-input.c
@@ -327,7 +327,7 @@ int em28xx_ir_init(struct em28xx *dev)
327 u8 ir_config; 327 u8 ir_config;
328 int err = -ENOMEM; 328 int err = -ENOMEM;
329 329
330 if (dev->ir_codes == NULL) { 330 if (dev->board.ir_codes == NULL) {
331 /* No remote control support */ 331 /* No remote control support */
332 return 0; 332 return 0;
333 } 333 }
@@ -366,7 +366,7 @@ int em28xx_ir_init(struct em28xx *dev)
366 usb_make_path(dev->udev, ir->phys, sizeof(ir->phys)); 366 usb_make_path(dev->udev, ir->phys, sizeof(ir->phys));
367 strlcat(ir->phys, "/input0", sizeof(ir->phys)); 367 strlcat(ir->phys, "/input0", sizeof(ir->phys));
368 368
369 ir_input_init(input_dev, &ir->ir, IR_TYPE_OTHER, dev->ir_codes); 369 ir_input_init(input_dev, &ir->ir, IR_TYPE_OTHER, dev->board.ir_codes);
370 input_dev->name = ir->name; 370 input_dev->name = ir->name;
371 input_dev->phys = ir->phys; 371 input_dev->phys = ir->phys;
372 input_dev->id.bustype = BUS_USB; 372 input_dev->id.bustype = BUS_USB;
diff --git a/drivers/media/video/em28xx/em28xx-video.c b/drivers/media/video/em28xx/em28xx-video.c
index 5cf32aed8c2e..845253c5d2a1 100644
--- a/drivers/media/video/em28xx/em28xx-video.c
+++ b/drivers/media/video/em28xx/em28xx-video.c
@@ -517,7 +517,7 @@ static int em28xx_config(struct em28xx *dev)
517 int retval; 517 int retval;
518 518
519 /* Sets I2C speed to 100 KHz */ 519 /* Sets I2C speed to 100 KHz */
520 if (!dev->is_em2800) { 520 if (!dev->board.is_em2800) {
521 retval = em28xx_write_regs_req(dev, 0x00, 0x06, "\x40", 1); 521 retval = em28xx_write_regs_req(dev, 0x00, 0x06, "\x40", 1);
522 if (retval < 0) { 522 if (retval < 0) {
523 em28xx_errdev("%s: em28xx_write_regs_req failed! retval [%d]\n", 523 em28xx_errdev("%s: em28xx_write_regs_req failed! retval [%d]\n",
@@ -573,7 +573,7 @@ static void video_mux(struct em28xx *dev, int index)
573 573
574 em28xx_i2c_call_clients(dev, VIDIOC_INT_S_VIDEO_ROUTING, &route); 574 em28xx_i2c_call_clients(dev, VIDIOC_INT_S_VIDEO_ROUTING, &route);
575 575
576 if (dev->has_msp34xx) { 576 if (dev->board.has_msp34xx) {
577 if (dev->i2s_speed) { 577 if (dev->i2s_speed) {
578 em28xx_i2c_call_clients(dev, VIDIOC_INT_I2S_CLOCK_FREQ, 578 em28xx_i2c_call_clients(dev, VIDIOC_INT_I2S_CLOCK_FREQ,
579 &dev->i2s_speed); 579 &dev->i2s_speed);
@@ -747,7 +747,7 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
747 747
748 mutex_lock(&dev->lock); 748 mutex_lock(&dev->lock);
749 749
750 if (dev->is_em2800) { 750 if (dev->board.is_em2800) {
751 /* the em2800 can only scale down to 50% */ 751 /* the em2800 can only scale down to 50% */
752 if (height % (maxh / 2)) 752 if (height % (maxh / 2))
753 height = maxh; 753 height = maxh;
@@ -998,7 +998,7 @@ static int vidioc_queryctrl(struct file *file, void *priv,
998 998
999 qc->id = id; 999 qc->id = id;
1000 1000
1001 if (!dev->has_msp34xx) { 1001 if (!dev->board.has_msp34xx) {
1002 for (i = 0; i < ARRAY_SIZE(em28xx_qctrl); i++) { 1002 for (i = 0; i < ARRAY_SIZE(em28xx_qctrl); i++) {
1003 if (qc->id && qc->id == em28xx_qctrl[i].id) { 1003 if (qc->id && qc->id == em28xx_qctrl[i].id) {
1004 memcpy(qc, &(em28xx_qctrl[i]), sizeof(*qc)); 1004 memcpy(qc, &(em28xx_qctrl[i]), sizeof(*qc));
@@ -1028,7 +1028,7 @@ static int vidioc_g_ctrl(struct file *file, void *priv,
1028 return rc; 1028 return rc;
1029 mutex_lock(&dev->lock); 1029 mutex_lock(&dev->lock);
1030 1030
1031 if (!dev->has_msp34xx) 1031 if (!dev->board.has_msp34xx)
1032 rc = em28xx_get_ctrl(dev, ctrl); 1032 rc = em28xx_get_ctrl(dev, ctrl);
1033 else 1033 else
1034 rc = -EINVAL; 1034 rc = -EINVAL;
@@ -1056,7 +1056,7 @@ static int vidioc_s_ctrl(struct file *file, void *priv,
1056 1056
1057 mutex_lock(&dev->lock); 1057 mutex_lock(&dev->lock);
1058 1058
1059 if (dev->has_msp34xx) 1059 if (dev->board.has_msp34xx)
1060 em28xx_i2c_call_clients(dev, VIDIOC_S_CTRL, ctrl); 1060 em28xx_i2c_call_clients(dev, VIDIOC_S_CTRL, ctrl);
1061 else { 1061 else {
1062 rc = 1; 1062 rc = 1;
@@ -2035,7 +2035,7 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
2035 dev->em28xx_read_reg_req_len = em28xx_read_reg_req_len; 2035 dev->em28xx_read_reg_req_len = em28xx_read_reg_req_len;
2036 dev->em28xx_write_regs_req = em28xx_write_regs_req; 2036 dev->em28xx_write_regs_req = em28xx_write_regs_req;
2037 dev->em28xx_read_reg_req = em28xx_read_reg_req; 2037 dev->em28xx_read_reg_req = em28xx_read_reg_req;
2038 dev->is_em2800 = em28xx_boards[dev->model].is_em2800; 2038 dev->board.is_em2800 = em28xx_boards[dev->model].is_em2800;
2039 2039
2040 em28xx_pre_card_setup(dev); 2040 em28xx_pre_card_setup(dev);
2041 2041
@@ -2092,7 +2092,7 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
2092 INIT_LIST_HEAD(&dev->vidq.queued); 2092 INIT_LIST_HEAD(&dev->vidq.queued);
2093 2093
2094 2094
2095 if (dev->has_msp34xx) { 2095 if (dev->board.has_msp34xx) {
2096 /* Send a reset to other chips via gpio */ 2096 /* Send a reset to other chips via gpio */
2097 errCode = em28xx_write_regs_req(dev, 0x00, 0x08, "\xf7", 1); 2097 errCode = em28xx_write_regs_req(dev, 0x00, 0x08, "\xf7", 1);
2098 if (errCode < 0) { 2098 if (errCode < 0) {
@@ -2150,7 +2150,7 @@ static void request_module_async(struct work_struct *work)
2150 else if (dev->has_alsa_audio) 2150 else if (dev->has_alsa_audio)
2151 request_module("em28xx-alsa"); 2151 request_module("em28xx-alsa");
2152 2152
2153 if (dev->has_dvb) 2153 if (dev->board.has_dvb)
2154 request_module("em28xx-dvb"); 2154 request_module("em28xx-dvb");
2155} 2155}
2156 2156
diff --git a/drivers/media/video/em28xx/em28xx.h b/drivers/media/video/em28xx/em28xx.h
index 059cc7f43b56..e33aa544bbbc 100644
--- a/drivers/media/video/em28xx/em28xx.h
+++ b/drivers/media/video/em28xx/em28xx.h
@@ -328,6 +328,7 @@ struct em28xx_reg_seq {
328 328
329struct em28xx_board { 329struct em28xx_board {
330 char *name; 330 char *name;
331 int vchannels;
331 int tuner_type; 332 int tuner_type;
332 int tuner_addr; 333 int tuner_addr;
333 334
@@ -416,18 +417,12 @@ struct em28xx {
416 int model; /* index in the device_data struct */ 417 int model; /* index in the device_data struct */
417 int devno; /* marks the number of this device */ 418 int devno; /* marks the number of this device */
418 enum em28xx_chip_id chip_id; 419 enum em28xx_chip_id chip_id;
419 unsigned int is_em2800:1; 420
420 unsigned int has_msp34xx:1; 421 struct em28xx_board board;
421 unsigned int has_tda9887:1; 422
422 unsigned int stream_on:1; /* Locks streams */ 423 unsigned int stream_on:1; /* Locks streams */
423 unsigned int has_audio_class:1; 424 unsigned int has_audio_class:1;
424 unsigned int has_alsa_audio:1; 425 unsigned int has_alsa_audio:1;
425 unsigned int max_range_640_480:1;
426 unsigned int has_dvb:1;
427 unsigned int has_snapshot_button:1;
428 unsigned int valid:1; /* report for validated boards */
429
430 unsigned char xclk, i2c_speed;
431 426
432 struct em28xx_IR *ir; 427 struct em28xx_IR *ir;
433 428
@@ -444,7 +439,6 @@ struct em28xx {
444 439
445 u32 i2s_speed; /* I2S speed for audio digital stream */ 440 u32 i2s_speed; /* I2S speed for audio digital stream */
446 441
447 enum em28xx_decoder decoder;
448 struct em28xx_audio_mode audio_mode; 442 struct em28xx_audio_mode audio_mode;
449 443
450 int tuner_type; /* type of the tuner */ 444 int tuner_type; /* type of the tuner */
@@ -527,9 +521,6 @@ struct em28xx {
527 /* Caches GPO and GPIO registers */ 521 /* Caches GPO and GPIO registers */
528 unsigned char reg_gpo, reg_gpio; 522 unsigned char reg_gpo, reg_gpio;
529 523
530 /* Infrared remote control support */
531 IR_KEYTAB_TYPE *ir_codes;
532
533 /* Snapshot button */ 524 /* Snapshot button */
534 char snapshot_button_path[30]; /* path of the input dev */ 525 char snapshot_button_path[30]; /* path of the input dev */
535 struct input_dev *sbutton_input_dev; 526 struct input_dev *sbutton_input_dev;
@@ -699,7 +690,7 @@ static inline int em28xx_gamma_set(struct em28xx *dev, s32 val)
699/*FIXME: maxw should be dependent of alt mode */ 690/*FIXME: maxw should be dependent of alt mode */
700static inline unsigned int norm_maxw(struct em28xx *dev) 691static inline unsigned int norm_maxw(struct em28xx *dev)
701{ 692{
702 if (dev->max_range_640_480) 693 if (dev->board.max_range_640_480)
703 return 640; 694 return 640;
704 else 695 else
705 return 720; 696 return 720;
@@ -707,7 +698,7 @@ static inline unsigned int norm_maxw(struct em28xx *dev)
707 698
708static inline unsigned int norm_maxh(struct em28xx *dev) 699static inline unsigned int norm_maxh(struct em28xx *dev)
709{ 700{
710 if (dev->max_range_640_480) 701 if (dev->board.max_range_640_480)
711 return 480; 702 return 480;
712 else 703 else
713 return (dev->norm & V4L2_STD_625_50) ? 576 : 480; 704 return (dev->norm & V4L2_STD_625_50) ? 576 : 480;