Commit 4e0973a9 authored by Devin Heitmueller's avatar Devin Heitmueller Committed by Mauro Carvalho Chehab

[media] cx88: Fix regression in initial video standard setting

Setting initial standard at the top of cx8800_initdev would cause the
first call to cx88_set_tvnorm() to return without programming any
registers (leaving the driver saying it's set to NTSC but the hardware
isn't programmed).  Even worse, any subsequent attempt to explicitly
set it to NTSC-M will return success but actually fail to program the
underlying registers unless first changing the standard to something
other than NTSC-M.

Set the initial standard later in the process, and make sure the field
is zero at the beginning to ensure that the call always goes through.

This regression was introduced in the following commit:

commit ccd6f1d4 ("[media] cx88: move width, height and field to core
struct")

Author: Hans Verkuil <hans.verkuil@cisco.com>

[media] cx88: move width, height and field to core struct
Signed-off-by: default avatarDevin Heitmueller <dheitmueller@kernellabs.com>
Cc: <stable@vger.kernel.org>      # for v3.19 and up
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 37404f91
...@@ -3681,7 +3681,14 @@ struct cx88_core *cx88_core_create(struct pci_dev *pci, int nr) ...@@ -3681,7 +3681,14 @@ struct cx88_core *cx88_core_create(struct pci_dev *pci, int nr)
core->nr = nr; core->nr = nr;
sprintf(core->name, "cx88[%d]", core->nr); sprintf(core->name, "cx88[%d]", core->nr);
core->tvnorm = V4L2_STD_NTSC_M; /*
* Note: Setting initial standard here would cause first call to
* cx88_set_tvnorm() to return without programming any registers. Leave
* it blank for at this point and it will get set later in
* cx8800_initdev()
*/
core->tvnorm = 0;
core->width = 320; core->width = 320;
core->height = 240; core->height = 240;
core->field = V4L2_FIELD_INTERLACED; core->field = V4L2_FIELD_INTERLACED;
......
...@@ -1435,7 +1435,7 @@ static int cx8800_initdev(struct pci_dev *pci_dev, ...@@ -1435,7 +1435,7 @@ static int cx8800_initdev(struct pci_dev *pci_dev,
/* initial device configuration */ /* initial device configuration */
mutex_lock(&core->lock); mutex_lock(&core->lock);
cx88_set_tvnorm(core, core->tvnorm); cx88_set_tvnorm(core, V4L2_STD_NTSC_M);
v4l2_ctrl_handler_setup(&core->video_hdl); v4l2_ctrl_handler_setup(&core->video_hdl);
v4l2_ctrl_handler_setup(&core->audio_hdl); v4l2_ctrl_handler_setup(&core->audio_hdl);
cx88_video_mux(core, 0); cx88_video_mux(core, 0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment