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

[media] au0828/au8522: Add PAL-M support

Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>

+41 -10
+34 -6
drivers/media/dvb-frontends/au8522_decoder.c
··· 248 248 AU8522_TVDEC_COMB_MODE_REG015H_CVBS); 249 249 au8522_writereg(state, AU8522_TVDED_DBG_MODE_REG060H, 250 250 AU8522_TVDED_DBG_MODE_REG060H_CVBS); 251 - au8522_writereg(state, AU8522_TVDEC_FORMAT_CTRL1_REG061H, 252 - AU8522_TVDEC_FORMAT_CTRL1_REG061H_FIELD_LEN_525 | 253 - AU8522_TVDEC_FORMAT_CTRL1_REG061H_LINE_LEN_63_492 | 254 - AU8522_TVDEC_FORMAT_CTRL1_REG061H_SUBCARRIER_NTSC_MN); 255 - au8522_writereg(state, AU8522_TVDEC_FORMAT_CTRL2_REG062H, 256 - AU8522_TVDEC_FORMAT_CTRL2_REG062H_STD_NTSC); 251 + 252 + if (state->std == V4L2_STD_PAL_M) { 253 + au8522_writereg(state, AU8522_TVDEC_FORMAT_CTRL1_REG061H, 254 + AU8522_TVDEC_FORMAT_CTRL1_REG061H_FIELD_LEN_525 | 255 + AU8522_TVDEC_FORMAT_CTRL1_REG061H_LINE_LEN_63_492 | 256 + AU8522_TVDEC_FORMAT_CTRL1_REG061H_SUBCARRIER_NTSC_AUTO); 257 + au8522_writereg(state, AU8522_TVDEC_FORMAT_CTRL2_REG062H, 258 + AU8522_TVDEC_FORMAT_CTRL2_REG062H_STD_PAL_M); 259 + } else { 260 + /* NTSC */ 261 + au8522_writereg(state, AU8522_TVDEC_FORMAT_CTRL1_REG061H, 262 + AU8522_TVDEC_FORMAT_CTRL1_REG061H_FIELD_LEN_525 | 263 + AU8522_TVDEC_FORMAT_CTRL1_REG061H_LINE_LEN_63_492 | 264 + AU8522_TVDEC_FORMAT_CTRL1_REG061H_SUBCARRIER_NTSC_MN); 265 + au8522_writereg(state, AU8522_TVDEC_FORMAT_CTRL2_REG062H, 266 + AU8522_TVDEC_FORMAT_CTRL2_REG062H_STD_NTSC); 267 + } 257 268 au8522_writereg(state, AU8522_TVDEC_VCR_DET_LLIM_REG063H, 258 269 AU8522_TVDEC_VCR_DET_LLIM_REG063H_CVBS); 259 270 au8522_writereg(state, AU8522_TVDEC_VCR_DET_HLIM_REG064H, ··· 635 624 return 0; 636 625 } 637 626 627 + static int au8522_s_std(struct v4l2_subdev *sd, v4l2_std_id std) 628 + { 629 + struct au8522_state *state = to_state(sd); 630 + 631 + if ((std & (V4L2_STD_PAL_M | V4L2_STD_NTSC_M)) == 0) 632 + return -EINVAL; 633 + 634 + state->std = std; 635 + 636 + if (state->operational_mode == AU8522_ANALOG_MODE) 637 + au8522_video_set(state); 638 + 639 + return 0; 640 + } 641 + 638 642 static int au8522_s_audio_routing(struct v4l2_subdev *sd, 639 643 u32 input, u32 output, u32 config) 640 644 { ··· 707 681 static const struct v4l2_subdev_video_ops au8522_video_ops = { 708 682 .s_routing = au8522_s_video_routing, 709 683 .s_stream = au8522_s_stream, 684 + .s_std = au8522_s_std, 710 685 }; 711 686 712 687 static const struct v4l2_subdev_ops au8522_ops = { ··· 790 763 } 791 764 792 765 state->c = client; 766 + state->std = V4L2_STD_NTSC_M; 793 767 state->vid_input = AU8522_COMPOSITE_CH1; 794 768 state->aud_input = AU8522_AUDIO_NONE; 795 769 state->id = 8522;
+1
drivers/media/dvb-frontends/au8522_priv.h
··· 348 348 /* Format control 2 */ 349 349 #define AU8522_TVDEC_FORMAT_CTRL2_REG062H_STD_AUTODETECT 0x00 350 350 #define AU8522_TVDEC_FORMAT_CTRL2_REG062H_STD_NTSC 0x01 351 + #define AU8522_TVDEC_FORMAT_CTRL2_REG062H_STD_PAL_M 0x02 351 352 352 353 353 354 #define AU8522_INPUT_CONTROL_REG081H_ATSC 0xC4
+6 -4
drivers/media/usb/au0828/au0828-video.c
··· 1364 1364 1365 1365 i2c_gate_ctrl(dev, 1); 1366 1366 1367 - /* FIXME: when we support something other than NTSC, we are going to 1368 - have to make the au0828 bridge adjust the size of its capture 1369 - buffer, which is currently hardcoded at 720x480 */ 1367 + /* 1368 + * FIXME: when we support something other than 60Hz standards, 1369 + * we are going to have to make the au0828 bridge adjust the size 1370 + * of its capture buffer, which is currently hardcoded at 720x480 1371 + */ 1370 1372 1371 1373 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, norm); 1372 1374 ··· 1917 1915 .fops = &au0828_v4l_fops, 1918 1916 .release = video_device_release, 1919 1917 .ioctl_ops = &video_ioctl_ops, 1920 - .tvnorms = V4L2_STD_NTSC_M, 1918 + .tvnorms = V4L2_STD_NTSC_M | V4L2_STD_PAL_M, 1921 1919 }; 1922 1920 1923 1921 /**************************************************************************/