Re: Kworld 315U and SAA7113?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx> wrote:

> From: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx>
> Subject: Re: Kworld 315U and SAA7113?
> To: "Franklin Meng" <fmeng2002@xxxxxxxxx>
> Cc: linux-media@xxxxxxxxxxxxxxx
> 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@xxxxxxxxx>
> wrote:
> > 
> >> From: Franklin Meng <fmeng2002@xxxxxxxxx>
> >> Subject: Kworld 315U and SAA7113?
> >> To: linux-media@xxxxxxxxxxxxxxx
> >> 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@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


      
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux