Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] v4l: 850: update em2800 scaler code and comments based on info from empiatech

- Update em2800 scaler code and comments based on info from empiatech

Signed-off-by: Sascha Sommer <saschasommer@freenet.de>
Signed-off-by: Markus Rechberger <mrechberger@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@brturbo.com.br>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Sascha Sommer and committed by
Linus Torvalds
52c02fcd 07345f5d

+23 -27
+15 -23
drivers/media/video/em28xx/em28xx-core.c
··· 430 430 431 431 int em2820_scaler_set(struct em2820 *dev, u16 h, u16 v) 432 432 { 433 - u8 buf[2]; 434 - buf[0] = h; 435 - buf[1] = h >> 8; 436 - em2820_write_regs(dev, HSCALELOW_REG, (char *)buf, 2); 437 - buf[0] = v; 438 - buf[1] = v >> 8; 439 - em2820_write_regs(dev, VSCALELOW_REG, (char *)buf, 2); 440 - if(dev->is_em2800){ 441 - /* FIXME */ 442 - /* random ratio scaling and 720x567 doesn't seem to work */ 443 - /* the maximum we can get is 640x480 with disabled scaler */ 444 - /* and norm_maxw set to 640 */ 445 - if(dev->width == 640 && dev->height == 480) 446 - return em2820_write_regs(dev, COMPR_REG,"\x00",1); 447 - if(dev->height > 288) 448 - return em2820_write_regs(dev, COMPR_REG,"\x10",1); 449 - if(dev->width > 360) 450 - return em2820_write_regs(dev, COMPR_REG,"\x20",1); 433 + u8 mode; 434 + /* the em2800 scaler only supports scaling down to 50% */ 435 + if(dev->is_em2800) 436 + mode = (v ? 0x20 : 0x00) | (h ? 0x10 : 0x00); 437 + else { 438 + u8 buf[2]; 439 + buf[0] = h; 440 + buf[1] = h >> 8; 441 + em2820_write_regs(dev, HSCALELOW_REG, (char *)buf, 2); 442 + buf[0] = v; 443 + buf[1] = v >> 8; 444 + em2820_write_regs(dev, VSCALELOW_REG, (char *)buf, 2); 445 + /* it seems that both H and V scalers must be active to work correctly */ 446 + mode = (h || v)? 0x30: 0x00; 451 447 } 452 - /* when H and V mixershould be used? */ 453 - /* return em2820_write_reg_bits(dev, COMPR_REG, (h ? 0x20 : 0x00) | (v ? 0x10 : 0x00), 0x30); */ 454 - /* it seems that both H and V scalers must be active to work correctly */ 455 - return em2820_write_reg_bits(dev, COMPR_REG, h 456 - || v ? 0x30 : 0x00, 0x30); 448 + return em2820_write_reg_bits(dev, COMPR_REG, mode, 0x30); 457 449 } 458 450 459 451 /* FIXME: this only function read values from dev */
+7 -3
drivers/media/video/em28xx/em28xx-video.c
··· 1308 1308 if (width > maxw) 1309 1309 width = maxw; 1310 1310 1311 - /* FIXME*/ 1312 1311 if(dev->is_em2800){ 1313 - /* we only know how to scale to 50% */ 1312 + /* the em2800 can only scale down to 50% */ 1314 1313 if(height % (maxh / 2)) 1315 1314 height=maxh; 1316 1315 if(width % (maxw / 2)) 1317 1316 width=maxw; 1318 - /* larger resoltion don't seem to work either */ 1317 + /* according to empiatech support */ 1318 + /* the MaxPacketSize is to small to support */ 1319 + /* framesizes larger than 640x480 @ 30 fps */ 1320 + /* or 640x576 @ 25 fps. As this would cut */ 1321 + /* of a part of the image we prefer */ 1322 + /* 360x576 or 360x480 for now */ 1319 1323 if(width == maxw && height == maxh) 1320 1324 width /= 2; 1321 1325 }
+1 -1
drivers/media/video/tuner-core.c
··· 369 369 /* If chip is not tda8290, don't register. 370 370 since it can be tda9887*/ 371 371 if (tda8290_probe(&t->i2c) != 0) { 372 - tuner_dbg("chip at addr %x is not a tda8290\n", addr); 372 + tuner_dbg("chip at addr %x is not a tda8290\n", addr); 373 373 kfree(t); 374 374 return 0; 375 375 }