Loading drivers/media/dvb-frontends/au8522_decoder.c +34 −6 Original line number Diff line number Diff line Loading @@ -248,12 +248,23 @@ static void setup_decoder_defaults(struct au8522_state *state, bool is_svideo) AU8522_TVDEC_COMB_MODE_REG015H_CVBS); au8522_writereg(state, AU8522_TVDED_DBG_MODE_REG060H, AU8522_TVDED_DBG_MODE_REG060H_CVBS); if (state->std == V4L2_STD_PAL_M) { au8522_writereg(state, AU8522_TVDEC_FORMAT_CTRL1_REG061H, AU8522_TVDEC_FORMAT_CTRL1_REG061H_FIELD_LEN_525 | AU8522_TVDEC_FORMAT_CTRL1_REG061H_LINE_LEN_63_492 | AU8522_TVDEC_FORMAT_CTRL1_REG061H_SUBCARRIER_NTSC_AUTO); au8522_writereg(state, AU8522_TVDEC_FORMAT_CTRL2_REG062H, AU8522_TVDEC_FORMAT_CTRL2_REG062H_STD_PAL_M); } else { /* NTSC */ au8522_writereg(state, AU8522_TVDEC_FORMAT_CTRL1_REG061H, AU8522_TVDEC_FORMAT_CTRL1_REG061H_FIELD_LEN_525 | AU8522_TVDEC_FORMAT_CTRL1_REG061H_LINE_LEN_63_492 | AU8522_TVDEC_FORMAT_CTRL1_REG061H_SUBCARRIER_NTSC_MN); au8522_writereg(state, AU8522_TVDEC_FORMAT_CTRL2_REG062H, AU8522_TVDEC_FORMAT_CTRL2_REG062H_STD_NTSC); } au8522_writereg(state, AU8522_TVDEC_VCR_DET_LLIM_REG063H, AU8522_TVDEC_VCR_DET_LLIM_REG063H_CVBS); au8522_writereg(state, AU8522_TVDEC_VCR_DET_HLIM_REG064H, Loading Loading @@ -624,6 +635,21 @@ static int au8522_s_video_routing(struct v4l2_subdev *sd, return 0; } static int au8522_s_std(struct v4l2_subdev *sd, v4l2_std_id std) { struct au8522_state *state = to_state(sd); if ((std & (V4L2_STD_PAL_M | V4L2_STD_NTSC_M)) == 0) return -EINVAL; state->std = std; if (state->operational_mode == AU8522_ANALOG_MODE) au8522_video_set(state); return 0; } static int au8522_s_audio_routing(struct v4l2_subdev *sd, u32 input, u32 output, u32 config) { Loading Loading @@ -681,6 +707,7 @@ static const struct v4l2_subdev_audio_ops au8522_audio_ops = { static const struct v4l2_subdev_video_ops au8522_video_ops = { .s_routing = au8522_s_video_routing, .s_stream = au8522_s_stream, .s_std = au8522_s_std, }; static const struct v4l2_subdev_ops au8522_ops = { Loading Loading @@ -763,6 +790,7 @@ static int au8522_probe(struct i2c_client *client, } state->c = client; state->std = V4L2_STD_NTSC_M; state->vid_input = AU8522_COMPOSITE_CH1; state->aud_input = AU8522_AUDIO_NONE; state->id = 8522; Loading drivers/media/dvb-frontends/au8522_priv.h +1 −0 Original line number Diff line number Diff line Loading @@ -348,6 +348,7 @@ int au8522_led_ctrl(struct au8522_state *state, int led); /* Format control 2 */ #define AU8522_TVDEC_FORMAT_CTRL2_REG062H_STD_AUTODETECT 0x00 #define AU8522_TVDEC_FORMAT_CTRL2_REG062H_STD_NTSC 0x01 #define AU8522_TVDEC_FORMAT_CTRL2_REG062H_STD_PAL_M 0x02 #define AU8522_INPUT_CONTROL_REG081H_ATSC 0xC4 Loading drivers/media/usb/au0828/au0828-video.c +6 −4 Original line number Diff line number Diff line Loading @@ -1364,9 +1364,11 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm) i2c_gate_ctrl(dev, 1); /* FIXME: when we support something other than NTSC, we are going to have to make the au0828 bridge adjust the size of its capture buffer, which is currently hardcoded at 720x480 */ /* * FIXME: when we support something other than 60Hz standards, * we are going to have to make the au0828 bridge adjust the size * of its capture buffer, which is currently hardcoded at 720x480 */ v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, norm); Loading Loading @@ -1915,7 +1917,7 @@ static const struct video_device au0828_video_template = { .fops = &au0828_v4l_fops, .release = video_device_release, .ioctl_ops = &video_ioctl_ops, .tvnorms = V4L2_STD_NTSC_M, .tvnorms = V4L2_STD_NTSC_M | V4L2_STD_PAL_M, }; /**************************************************************************/ Loading Loading
drivers/media/dvb-frontends/au8522_decoder.c +34 −6 Original line number Diff line number Diff line Loading @@ -248,12 +248,23 @@ static void setup_decoder_defaults(struct au8522_state *state, bool is_svideo) AU8522_TVDEC_COMB_MODE_REG015H_CVBS); au8522_writereg(state, AU8522_TVDED_DBG_MODE_REG060H, AU8522_TVDED_DBG_MODE_REG060H_CVBS); if (state->std == V4L2_STD_PAL_M) { au8522_writereg(state, AU8522_TVDEC_FORMAT_CTRL1_REG061H, AU8522_TVDEC_FORMAT_CTRL1_REG061H_FIELD_LEN_525 | AU8522_TVDEC_FORMAT_CTRL1_REG061H_LINE_LEN_63_492 | AU8522_TVDEC_FORMAT_CTRL1_REG061H_SUBCARRIER_NTSC_AUTO); au8522_writereg(state, AU8522_TVDEC_FORMAT_CTRL2_REG062H, AU8522_TVDEC_FORMAT_CTRL2_REG062H_STD_PAL_M); } else { /* NTSC */ au8522_writereg(state, AU8522_TVDEC_FORMAT_CTRL1_REG061H, AU8522_TVDEC_FORMAT_CTRL1_REG061H_FIELD_LEN_525 | AU8522_TVDEC_FORMAT_CTRL1_REG061H_LINE_LEN_63_492 | AU8522_TVDEC_FORMAT_CTRL1_REG061H_SUBCARRIER_NTSC_MN); au8522_writereg(state, AU8522_TVDEC_FORMAT_CTRL2_REG062H, AU8522_TVDEC_FORMAT_CTRL2_REG062H_STD_NTSC); } au8522_writereg(state, AU8522_TVDEC_VCR_DET_LLIM_REG063H, AU8522_TVDEC_VCR_DET_LLIM_REG063H_CVBS); au8522_writereg(state, AU8522_TVDEC_VCR_DET_HLIM_REG064H, Loading Loading @@ -624,6 +635,21 @@ static int au8522_s_video_routing(struct v4l2_subdev *sd, return 0; } static int au8522_s_std(struct v4l2_subdev *sd, v4l2_std_id std) { struct au8522_state *state = to_state(sd); if ((std & (V4L2_STD_PAL_M | V4L2_STD_NTSC_M)) == 0) return -EINVAL; state->std = std; if (state->operational_mode == AU8522_ANALOG_MODE) au8522_video_set(state); return 0; } static int au8522_s_audio_routing(struct v4l2_subdev *sd, u32 input, u32 output, u32 config) { Loading Loading @@ -681,6 +707,7 @@ static const struct v4l2_subdev_audio_ops au8522_audio_ops = { static const struct v4l2_subdev_video_ops au8522_video_ops = { .s_routing = au8522_s_video_routing, .s_stream = au8522_s_stream, .s_std = au8522_s_std, }; static const struct v4l2_subdev_ops au8522_ops = { Loading Loading @@ -763,6 +790,7 @@ static int au8522_probe(struct i2c_client *client, } state->c = client; state->std = V4L2_STD_NTSC_M; state->vid_input = AU8522_COMPOSITE_CH1; state->aud_input = AU8522_AUDIO_NONE; state->id = 8522; Loading
drivers/media/dvb-frontends/au8522_priv.h +1 −0 Original line number Diff line number Diff line Loading @@ -348,6 +348,7 @@ int au8522_led_ctrl(struct au8522_state *state, int led); /* Format control 2 */ #define AU8522_TVDEC_FORMAT_CTRL2_REG062H_STD_AUTODETECT 0x00 #define AU8522_TVDEC_FORMAT_CTRL2_REG062H_STD_NTSC 0x01 #define AU8522_TVDEC_FORMAT_CTRL2_REG062H_STD_PAL_M 0x02 #define AU8522_INPUT_CONTROL_REG081H_ATSC 0xC4 Loading
drivers/media/usb/au0828/au0828-video.c +6 −4 Original line number Diff line number Diff line Loading @@ -1364,9 +1364,11 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm) i2c_gate_ctrl(dev, 1); /* FIXME: when we support something other than NTSC, we are going to have to make the au0828 bridge adjust the size of its capture buffer, which is currently hardcoded at 720x480 */ /* * FIXME: when we support something other than 60Hz standards, * we are going to have to make the au0828 bridge adjust the size * of its capture buffer, which is currently hardcoded at 720x480 */ v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, norm); Loading Loading @@ -1915,7 +1917,7 @@ static const struct video_device au0828_video_template = { .fops = &au0828_v4l_fops, .release = video_device_release, .ioctl_ops = &video_ioctl_ops, .tvnorms = V4L2_STD_NTSC_M, .tvnorms = V4L2_STD_NTSC_M | V4L2_STD_PAL_M, }; /**************************************************************************/ Loading