From: Franklin Meng <fmeng2002@yahoo.com>
To: Mauro Carvalho Chehab <mchehab@redhat.com>
Cc: linux-media@vger.kernel.org
Subject: Re: Kworld 315U and SAA7113?
Date: Thu, 14 Jan 2010 10:17:02 -0800 (PST) [thread overview]
Message-ID: <728581.74188.qm@web32701.mail.mud.yahoo.com> (raw)
In-Reply-To: <4B4E36AC.7090503@redhat.com>
Mario,
Thank you for taking a look at this.. I'll resubmit the patches.
Thanks,
Franklin Meng
--- On Wed, 1/13/10, Mauro Carvalho Chehab <mchehab@redhat.com> wrote:
> From: Mauro Carvalho Chehab <mchehab@redhat.com>
> Subject: Re: Kworld 315U and SAA7113?
> To: "Franklin Meng" <fmeng2002@yahoo.com>
> Cc: linux-media@vger.kernel.org
> Date: Wednesday, January 13, 2010, 1:10 PM
> Hi Franklin,
>
> I have no Kworld 315U here for testing, but your patch
> looked sane on my eyes.
> In order to merge this upstream, it would be better if you
> could submit it as two
> separate patches: the first one with the saa7115 changes to
> support re-energizing
> the device, and the second one with the em28xx changes.
>
> Please send your Signed-off-by: on the patches.
>
> Cheers,
> Mauro.
>
> Franklin Meng wrote:
> > I tweaked the GPIO's a bit more for the Kworld 315U
> and switching between analog and digital signals is more
> reliable now. Attached is an updated diff.
> >
> > diff -r b6b82258cf5e
> linux/drivers/media/video/em28xx/em28xx-cards.c
> > ---
> a/linux/drivers/media/video/em28xx/em28xx-cards.c Thu
> Dec 31 19:14:54 2009 -0200
> > +++
> b/linux/drivers/media/video/em28xx/em28xx-cards.c Sat
> Jan 09 11:29:27 2010 -0800
> > @@ -122,13 +122,31 @@
>
>
>
>
> > };
>
>
>
>
>
> > #endif
>
>
>
>
>
> >
>
>
>
>
>
> > +/* Kworld 315U
>
>
>
>
> > + GPIO0 - Enable digital power
> (lgdt3303) - low to enable
>
>
> > + GPIO1 - Enable analog power
> (saa7113/emp202) - low to enable
>
> > + GPIO7 - enables something ?
>
>
>
>
> > + GOP2 - ?? some sort of reset
> ?
>
>
>
> > + GOP3 - lgdt3303 reset
>
>
>
>
> > + */
>
>
>
>
>
> > /* Board - EM2882 Kworld 315U digital */
>
>
>
> > static struct em28xx_reg_seq
> em2882_kworld_315u_digital[] = {
>
> > -
> {EM28XX_R08_GPIO,
> 0xff, 0xff,
> 10},
>
>
> > -
> {EM28XX_R08_GPIO,
> 0xfe, 0xff,
> 10},
>
>
> > +
> {EM28XX_R08_GPIO,
> 0x7e, 0xff,
> 10},
>
>
> >
> {EM2880_R04_GPO,
> 0x04, 0xff,
> 10},
>
>
> >
> {EM2880_R04_GPO,
> 0x0c, 0xff,
> 10},
>
>
> > -
> {EM28XX_R08_GPIO,
> 0x7e, 0xff,
> 10},
>
>
> > + { -1,
>
> -1, -1,
> -1},
>
>
> > +};
>
>
>
>
>
> > +
>
>
>
>
>
> > +/* Board - EM2882 Kworld 315U analog1 analog tv
> */
>
>
> > +static struct em28xx_reg_seq
> em2882_kworld_315u_analog1[] = {
>
> > +
> {EM28XX_R08_GPIO,
> 0xfd, 0xff,
> 10},
>
>
> > +
> {EM28XX_R08_GPIO,
> 0x7d, 0xff,
> 10},
>
>
> > + { -1,
>
> -1, -1,
> -1},
>
>
> > +};
>
>
>
>
>
> > +
>
>
>
>
>
> > +/* Board - EM2882 Kworld 315U analog2
> component/svideo */
>
> > +static struct em28xx_reg_seq
> em2882_kworld_315u_analog2[] = {
>
> > +
> {EM28XX_R08_GPIO,
> 0xfd, 0xff,
> 10},
>
>
> > {
> -1,
> -1, -1,
> -1},
>
>
> > };
>
>
>
>
>
> >
>
>
>
>
>
> > @@ -140,6 +158,14 @@
>
>
>
>
> > {
> -1,
> -1, -1,
> -1},
>
>
> > };
>
>
>
>
>
> >
>
>
>
>
>
> > +/* Board - EM2882 Kworld 315U suspend */
>
>
>
> > +static struct em28xx_reg_seq
> em2882_kworld_315u_suspend[] = {
>
> > +
> {EM28XX_R08_GPIO,
> 0xff, 0xff,
> 10},
>
>
> > +
> {EM2880_R04_GPO,
> 0x08, 0xff,
> 10},
>
>
> > +
> {EM2880_R04_GPO,
> 0x0c, 0xff,
> 10},
>
>
> > + { -1,
>
> -1, -1,
> -1},
>
>
> > +};
>
>
>
>
>
> > +
>
>
>
>
>
> > static struct em28xx_reg_seq
> kworld_330u_analog[] = {
>
>
> >
> {EM28XX_R08_GPIO,
> 0x6d, ~EM_GPIO_4,
> 10},
>
> >
> {EM2880_R04_GPO,
> 0x00, 0xff,
> 10},
>
>
> > @@ -1314,28 +1340,28 @@
>
>
>
>
> >
> .decoder =
> EM28XX_SAA711X,
>
>
> >
> .has_dvb =
> 1,
>
>
>
> >
> .dvb_gpio =
> em2882_kworld_315u_digital,
>
>
> > +
> .suspend_gpio =
> em2882_kworld_315u_suspend,
>
>
> >
> .xclk
> = EM28XX_XCLK_FREQUENCY_12MHZ,
>
>
> >
> .i2c_speed =
> EM28XX_I2C_CLK_WAIT_ENABLE,
>
>
> > -
> /* Analog mode - still not ready */
>
>
>
> > -
> /*.input = {
> {
>
>
>
> > +
> .input = {
> {
>
>
>
> >
> .type =
> EM28XX_VMUX_TELEVISION,
>
>
> >
> .vmux =
> SAA7115_COMPOSITE2,
>
>
> >
> .amux =
> EM28XX_AMUX_VIDEO,
>
>
> > -
> .gpio =
> em2882_kworld_315u_analog,
>
>
> > +
> .gpio =
> em2882_kworld_315u_analog1,
>
>
> >
> .aout =
> EM28XX_AOUT_PCM_IN | EM28XX_AOUT_PCM_STEREO,
>
> >
> }, {
>
>
>
>
> >
> .type =
> EM28XX_VMUX_COMPOSITE1,
>
>
> >
> .vmux =
> SAA7115_COMPOSITE0,
>
>
> >
> .amux =
> EM28XX_AMUX_LINE_IN,
>
>
> > -
> .gpio =
> em2882_kworld_315u_analog1,
>
>
> > +
> .gpio =
> em2882_kworld_315u_analog2,
>
>
> >
> .aout =
> EM28XX_AOUT_PCM_IN | EM28XX_AOUT_PCM_STEREO,
>
> >
> }, {
>
>
>
>
> >
> .type =
> EM28XX_VMUX_SVIDEO,
>
>
> >
> .vmux =
> SAA7115_SVIDEO3,
>
>
> >
> .amux =
> EM28XX_AMUX_LINE_IN,
>
>
> > -
> .gpio =
> em2882_kworld_315u_analog1,
>
>
> > +
> .gpio =
> em2882_kworld_315u_analog2,
>
>
> >
> .aout =
> EM28XX_AOUT_PCM_IN | EM28XX_AOUT_PCM_STEREO,
>
> > -
> } }, */
>
>
>
>
> > +
> } },
>
>
>
>
> > },
>
>
>
>
>
> >
> [EM2880_BOARD_EMPIRE_DUAL_TV] = {
>
>
>
> >
> .name = "Empire dual TV",
>
>
>
> > diff -r b6b82258cf5e
> linux/drivers/media/video/em28xx/em28xx-core.c
>
>
> > ---
> a/linux/drivers/media/video/em28xx/em28xx-core.c
> Thu Dec 31 19:14:54 2009 -0200
> > +++
> b/linux/drivers/media/video/em28xx/em28xx-core.c
> Sat Jan 09 11:29:27 2010 -0800
> > @@ -1132,6 +1132,7 @@
>
>
>
>
> > */
>
>
>
>
>
> > void em28xx_wake_i2c(struct em28xx *dev)
>
>
>
> > {
>
>
>
>
>
> > +
> v4l2_device_call_all(&dev->v4l2_dev,
> 0, core, s_power, 1);
>
> >
> v4l2_device_call_all(&dev->v4l2_dev,
> 0, core, reset, 0);
>
> >
> v4l2_device_call_all(&dev->v4l2_dev,
> 0, video, s_routing,
>
> >
>
> INPUT(dev->ctl_input)->vmux, 0,
> 0);
>
> > diff -r b6b82258cf5e
> linux/drivers/media/video/saa7115.c
>
>
> > --- a/linux/drivers/media/video/saa7115.c
> Thu Dec 31 19:14:54 2009 -0200
>
> > +++ b/linux/drivers/media/video/saa7115.c
> Sat Jan 09 11:29:27 2010 -0800
>
> > @@ -1338,6 +1338,59 @@
>
>
>
>
> > return 0;
>
>
>
>
>
> > }
>
>
>
>
>
> >
>
>
>
>
>
> > +static int saa711x_s_power(struct v4l2_subdev *sd,
> int val)
>
> > +{
>
>
>
>
>
> > + struct saa711x_state
> *state = to_state(sd);
>
>
> > +
>
>
>
>
>
> > + if(val > 1 || val
> < 0)
>
>
>
> > +
> return -EINVAL;
>
>
>
>
> > +
>
>
>
>
>
> > + /* There really isn't
> a way to put the chip into power saving
>
> > +
> other than by pulling CE to ground so all
> we do is return
>
> > +
> out of this function
>
>
>
> > + */
>
>
>
>
>
> > + if(val == 0)
>
>
>
>
> > +
> return 0;
>
>
>
>
> > +
>
>
>
>
>
> > + /* When enabling the
> chip again we need to reinitialize the
>
> > +
> all the values
>
>
>
> > + */
>
>
>
>
>
> > + state->input =
> -1;
>
>
>
> > + state->output =
> SAA7115_IPORT_ON;
>
>
>
> > + state->enable =
> 1;
>
>
>
> > + state->radio =
> 0;
>
>
>
> > + state->bright =
> 128;
>
>
>
> > + state->contrast =
> 64;
>
>
>
> > + state->hue =
> 0;
>
>
>
>
> > + state->sat =
> 64;
>
>
>
> > +
>
>
>
>
>
> > + state->audclk_freq
> = 48000;
>
>
>
> > +
>
>
>
>
>
> > + v4l2_dbg(1, debug,
> sd, "writing init values s_power\n");
>
> > +
>
>
>
>
>
> > + /* init to 60hz/48khz
> */
>
>
>
> > +
> state->crystal_freq =
> SAA7115_FREQ_24_576_MHZ;
>
>
> > + switch
> (state->ident) {
>
>
>
> > + case
> V4L2_IDENT_SAA7111:
>
>
>
> > +
> saa711x_writeregs(sd, saa7111_init);
>
>
> > +
> break;
>
>
>
>
> > + case
> V4L2_IDENT_SAA7113:
>
>
>
> > +
> saa711x_writeregs(sd, saa7113_init);
> > +
> break;
> > + default:
> > +
> state->crystal_freq =
> SAA7115_FREQ_32_11_MHZ;
> > +
> saa711x_writeregs(sd,
> saa7115_init_auto_input);
> > + }
> > + if (state->ident
> != V4L2_IDENT_SAA7111)
> > +
> saa711x_writeregs(sd, saa7115_init_misc);
> > +
> saa711x_set_v4lstd(sd, V4L2_STD_NTSC);
> > +
> > + v4l2_dbg(1, debug,
> sd, "status: (1E) 0x%02x, (1F) 0x%02x\n",
> > +
> saa711x_read(sd,
> R_1E_STATUS_BYTE_1_VD_DEC),
> > +
> saa711x_read(sd,
> R_1F_STATUS_BYTE_2_VD_DEC));
> > + return 0;
> > +}
> > +
> > static int saa711x_reset(struct v4l2_subdev *sd,
> u32 val)
> > {
> > v4l2_dbg(1,
> debug, sd, "decoder RESET\n");
> > @@ -1513,6 +1566,7 @@
> > .s_std =
> saa711x_s_std,
> > .reset =
> saa711x_reset,
> > .s_gpio =
> saa711x_s_gpio,
> > + .s_power =
> saa711x_s_power,
> > #ifdef CONFIG_VIDEO_ADV_DEBUG
> > .g_register =
> saa711x_g_register,
> > .s_register =
> saa711x_s_register,
> >
> >
> > Thanks,
> > Franklin Meng
> >
> > --- On Thu, 1/7/10, Franklin Meng <fmeng2002@yahoo.com>
> wrote:
> >
> >> From: Franklin Meng <fmeng2002@yahoo.com>
> >> Subject: Kworld 315U and SAA7113?
> >> To: linux-media@vger.kernel.org
> >> Date: Thursday, January 7, 2010, 7:48 PM
> >> After some work I have finally gotten
> >> the analog inputs to work with the Kworld 315U
> device. I
> >> have attached the changes/updates to the em28xx
> driver.
> >> Note: I still don't have analog sound working
> yet..
> >>
> >> I am hoping someone can comment on the changes in
> >> saa7115.c. I added a s_power routine to
> reinitialize the
> >> device. The reason I am reinitializing this
> device is
> >> because
> >>
> >> 1. I cannot keep both the LG demod and the SAA
> powered on
> >> at the same time for my device
> >>
> >> 2. The SAA datasheet seems to suggest that after
> a
> >> reset/power-on the chip needs to be
> reinitialized.
> >>
> >> 3. Reinitializing causes the analog inputs to
> work
> >> correctly.
> >>
> >> Here's what is says in the SAA7113 datasheet..
> >> ....
> >> Status after power-on
> >> control sequence
> >>
> >> VPO7 to VPO0, RTCO, RTS0 and RTS1
> >> are held in high-impedance state
> >>
> >> after power-on (reset
> >> sequence) a complete
> >> I2C-bus transmission is
> >> required
> >> ...
> >> The above is really suppose to be arranged
> horizontally in
> >> 3 columns. Anyways, the last part describes
> that "a
> >> complete I2C bus transmission is required"
> This is why
> >> I think the chip needs to be reinitialized.
>
> >>
> >>
> >> Last thing is that the initialization routing uses
> these
> >> defaults:
> >>
> >> state->bright =
> 128;
> >> state->contrast =
> 64;
> >> state->hue = 0;
> >> state->sat = 64;
> >>
> >> I was wondering if we should just read the back
> the values
> >> that were initialized by the initialization
> routine and use
> >> those values instead.The reason is because it
> seems like the
> >> different SAA's use slightly different values
> when
> >> initializing.
> >>
> >> Thanks,
> >> Franklin Meng
> >>
> >>
> >>
> >
> >
> >
> >
>
> --
> To unsubscribe from this list: send the line "unsubscribe
> linux-media" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
next prev parent reply other threads:[~2010-01-14 18:17 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-09 19:30 Kworld 315U and SAA7113? Franklin Meng
2010-01-13 21:10 ` Mauro Carvalho Chehab
2010-01-14 18:17 ` Franklin Meng [this message]
2010-01-13 22:04 ` Devin Heitmueller
2010-01-14 18:54 ` Franklin Meng
2010-01-14 19:13 ` Devin Heitmueller
2010-01-14 22:00 ` CityK
2010-01-14 22:09 ` Devin Heitmueller
2010-01-15 3:03 ` Franklin Meng
2010-01-17 7:05 ` Franklin Meng
2010-01-17 12:28 ` Mauro Carvalho Chehab
2010-01-17 16:28 ` Devin Heitmueller
2010-01-17 19:02 ` Franklin Meng
-- strict thread matches above, loose matches on Subject: below --
2010-01-09 8:30 Franklin Meng
2010-01-08 3:48 Franklin Meng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=728581.74188.qm@web32701.mail.mud.yahoo.com \
--to=fmeng2002@yahoo.com \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.