DM1105: could not attach frontend 195d:1105

Message ID 201001311545.09620.liplianin@me.by (mailing list archive)
State Superseded, archived
Headers

Commit Message

Igor M. Liplianin Jan. 31, 2010, 1:45 p.m. UTC
  On 20 ?????? 2010 23:20:20 paul10@planar.id.au wrote:
> Igor wrote:
> > Oh, that is wrong. It is registers addresses, Never touch this.
> >
> > Let's look on that part of code:
> >
> > /* GPIO's for LNB power control */
> > #define DM1105_LNB_MASK                         0x00000000 // later in
>
> code write it to
>
> > DM1105_GPIOCTR, all GPIO's as OUT
> > #define DM1105_LNB_OFF                          0x00020000 // later in
>
> code write it to
>
> > DM1105_GPIOVAL, set GPIO17 to HIGH
> >
> > But you have not to change this.
> > Right way is to write another entry in cards structure and so on.
> > Better leave it to me.
> >
> > Regards
> > Igor
>
> Thanks for all your help, I understand better now.  I have moved to code
> like that at the bottom.  It still doesn't work, but feels a lot closer.
>
> Before I keep playing with values, I want to check I'm on the right track.
> Does it look right?  Specific questions:
> 1. I see there is a hw_init function.  Should I be using that?  I put the
> logic into fe_attach because there was already card-specific logic in
> there.  But this feels like hw initialisation.
>
> 2. Should I set the control to input or output?  I'm assuming input = 1.
>
> 3. Would pin 15 be numbered from the left or right - is it 0x4, or 0x2000?
>
> Thanks,
>
> Paul
>
> *** dm1105.c.old        2010-01-13 16:15:00.000000000 +1100
> --- dm1105.c    2010-01-21 08:13:14.000000000 +1100
> ***************
> *** 51,56 ****
> --- 51,57 ----
>   #define DM1105_BOARD_DVBWORLD_2002    1
>   #define DM1105_BOARD_DVBWORLD_2004    2
>   #define DM1105_BOARD_AXESS_DM05               3
> + #define DM1105_BOARD_UNBRANDED                4
>
>   /* ----------------------------------------------- */
>   /*
> ***************
> *** 171,176 ****
> --- 172,181 ----
>   #define DM05_LNB_13V                          0x00020000
>   #define DM05_LNB_18V                          0x00030000
>
> + /* GPIO's for demod reset for unbranded 195d:1105 */
> + #define UNBRANDED_DEMOD_MASK                  0x00008000
> + #define UNBRANDED_DEMOD_RESET                 0x00008000
> +
>   static unsigned int card[]  = {[0 ... 3] = UNSET };
>   module_param_array(card,  int, NULL, 0444);
>   MODULE_PARM_DESC(card, "card type");
> ***************
> *** 206,211 ****
> --- 211,219 ----
>         [DM1105_BOARD_AXESS_DM05] = {
>                 .name           = "Axess/EasyTv DM05",
>         },
> +       [DM1105_BOARD_UNBRANDED] = {
> +               .name           = "Unbranded 195d:1105",
> +         },
>   };
>
>   static const struct dm1105_subid dm1105_subids[] = {
> ***************
> *** 229,234 ****
> --- 237,246 ----
>                 .subvendor = 0x195d,
>                 .subdevice = 0x1105,
>                 .card      = DM1105_BOARD_AXESS_DM05,
> +       }, {
> +               .subvendor = 0x195d,
> +               .subdevice = 0x1105,
> +               .card      = DM1105_BOARD_UNBRANDED,
>         },
>   };
>
> ***************
> *** 698,703 ****
> --- 710,727 ----
>                         dm1105dvb->fe->ops.set_voltage =
> dm1105dvb_set_voltage;
>
>                 break;
> +       case DM1105_BOARD_UNBRANDED:
> +                 printk(KERN_ERR "Attaching as board_unbranded\n");
> +               outl(UNBRANDED_DEMOD_MASK, dm_io_mem(DM1105_GPIOCTR));
> +               outl(UNBRANDED_DEMOD_RESET , dm_io_mem(DM1105_GPIOVAL));
> +               dm1105dvb->fe = dvb_attach(
> +                       si21xx_attach, &serit_config,
> +                       &dm1105dvb->i2c_adap);
> +                       if (dm1105dvb->fe)
> +                               dm1105dvb->fe->ops.set_voltage =
> +                                       dm1105dvb_set_voltage;
> +
> +               break;
>         case DM1105_BOARD_DVBWORLD_2002:
>         case DM1105_BOARD_AXESS_DM05:
>         default:
Some things are missed, like keep GPIO15 high in set_voltage function.
Try attached patch against current v4l-dvb tree with modprobe option card=4
	modprobe dm1105 card=4
  

Comments

Nameer Kazzaz Feb. 1, 2010, 12:17 p.m. UTC | #1
Hi there,
dmesg output with patched dm1105.c against current v4l-dvb 'modprob 
dm1105 card=4'

dm1105 0000:05:0f.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
DVB: registering new adapter (dm1105)
dm1105 0000:05:0f.0: MAC dd49b0dc
dm1105 0000:05:0f.0: could not attach frontend
dm1105 0000:05:0f.0: PCI INT A disabled

Thanks
Nameer Kazzaz

Igor M. Liplianin wrote:
> On 20 ?????? 2010 23:20:20 paul10@planar.id.au wrote:
>   
>> Igor wrote:
>>     
>>> Oh, that is wrong. It is registers addresses, Never touch this.
>>>
>>> Let's look on that part of code:
>>>
>>> /* GPIO's for LNB power control */
>>> #define DM1105_LNB_MASK                         0x00000000 // later in
>>>       
>> code write it to
>>
>>     
>>> DM1105_GPIOCTR, all GPIO's as OUT
>>> #define DM1105_LNB_OFF                          0x00020000 // later in
>>>       
>> code write it to
>>
>>     
>>> DM1105_GPIOVAL, set GPIO17 to HIGH
>>>
>>> But you have not to change this.
>>> Right way is to write another entry in cards structure and so on.
>>> Better leave it to me.
>>>
>>> Regards
>>> Igor
>>>       
>> Thanks for all your help, I understand better now.  I have moved to code
>> like that at the bottom.  It still doesn't work, but feels a lot closer.
>>
>> Before I keep playing with values, I want to check I'm on the right track.
>> Does it look right?  Specific questions:
>> 1. I see there is a hw_init function.  Should I be using that?  I put the
>> logic into fe_attach because there was already card-specific logic in
>> there.  But this feels like hw initialisation.
>>
>> 2. Should I set the control to input or output?  I'm assuming input = 1.
>>
>> 3. Would pin 15 be numbered from the left or right - is it 0x4, or 0x2000?
>>
>> Thanks,
>>
>> Paul
>>
>> *** dm1105.c.old        2010-01-13 16:15:00.000000000 +1100
>> --- dm1105.c    2010-01-21 08:13:14.000000000 +1100
>> ***************
>> *** 51,56 ****
>> --- 51,57 ----
>>   #define DM1105_BOARD_DVBWORLD_2002    1
>>   #define DM1105_BOARD_DVBWORLD_2004    2
>>   #define DM1105_BOARD_AXESS_DM05               3
>> + #define DM1105_BOARD_UNBRANDED                4
>>
>>   /* ----------------------------------------------- */
>>   /*
>> ***************
>> *** 171,176 ****
>> --- 172,181 ----
>>   #define DM05_LNB_13V                          0x00020000
>>   #define DM05_LNB_18V                          0x00030000
>>
>> + /* GPIO's for demod reset for unbranded 195d:1105 */
>> + #define UNBRANDED_DEMOD_MASK                  0x00008000
>> + #define UNBRANDED_DEMOD_RESET                 0x00008000
>> +
>>   static unsigned int card[]  = {[0 ... 3] = UNSET };
>>   module_param_array(card,  int, NULL, 0444);
>>   MODULE_PARM_DESC(card, "card type");
>> ***************
>> *** 206,211 ****
>> --- 211,219 ----
>>         [DM1105_BOARD_AXESS_DM05] = {
>>                 .name           = "Axess/EasyTv DM05",
>>         },
>> +       [DM1105_BOARD_UNBRANDED] = {
>> +               .name           = "Unbranded 195d:1105",
>> +         },
>>   };
>>
>>   static const struct dm1105_subid dm1105_subids[] = {
>> ***************
>> *** 229,234 ****
>> --- 237,246 ----
>>                 .subvendor = 0x195d,
>>                 .subdevice = 0x1105,
>>                 .card      = DM1105_BOARD_AXESS_DM05,
>> +       }, {
>> +               .subvendor = 0x195d,
>> +               .subdevice = 0x1105,
>> +               .card      = DM1105_BOARD_UNBRANDED,
>>         },
>>   };
>>
>> ***************
>> *** 698,703 ****
>> --- 710,727 ----
>>                         dm1105dvb->fe->ops.set_voltage =
>> dm1105dvb_set_voltage;
>>
>>                 break;
>> +       case DM1105_BOARD_UNBRANDED:
>> +                 printk(KERN_ERR "Attaching as board_unbranded\n");
>> +               outl(UNBRANDED_DEMOD_MASK, dm_io_mem(DM1105_GPIOCTR));
>> +               outl(UNBRANDED_DEMOD_RESET , dm_io_mem(DM1105_GPIOVAL));
>> +               dm1105dvb->fe = dvb_attach(
>> +                       si21xx_attach, &serit_config,
>> +                       &dm1105dvb->i2c_adap);
>> +                       if (dm1105dvb->fe)
>> +                               dm1105dvb->fe->ops.set_voltage =
>> +                                       dm1105dvb_set_voltage;
>> +
>> +               break;
>>         case DM1105_BOARD_DVBWORLD_2002:
>>         case DM1105_BOARD_AXESS_DM05:
>>         default:
>>     
> Some things are missed, like keep GPIO15 high in set_voltage function.
> Try attached patch against current v4l-dvb tree with modprobe option card=4
> 	modprobe dm1105 card=4
>   

--
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
  
Nameer Kazzaz Feb. 2, 2010, 3:21 p.m. UTC | #2
Hi Igor,
    What do you think ? if I can help you solve this, let me know what I 
can do.

Thanks
Nameer

Nameer Kazzaz wrote:
> Hi there,
> dmesg output with patched dm1105.c against current v4l-dvb 'modprob 
> dm1105 card=4'
>
> dm1105 0000:05:0f.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
> DVB: registering new adapter (dm1105)
> dm1105 0000:05:0f.0: MAC dd49b0dc
> dm1105 0000:05:0f.0: could not attach frontend
> dm1105 0000:05:0f.0: PCI INT A disabled
>
> Thanks
> Nameer Kazzaz
>
> Igor M. Liplianin wrote:
>> On 20 ?????? 2010 23:20:20 paul10@planar.id.au wrote:
>>  
>>> Igor wrote:
>>>    
>>>> Oh, that is wrong. It is registers addresses, Never touch this.
>>>>
>>>> Let's look on that part of code:
>>>>
>>>> /* GPIO's for LNB power control */
>>>> #define DM1105_LNB_MASK                         0x00000000 // later in
>>>>       
>>> code write it to
>>>
>>>    
>>>> DM1105_GPIOCTR, all GPIO's as OUT
>>>> #define DM1105_LNB_OFF                          0x00020000 // later in
>>>>       
>>> code write it to
>>>
>>>    
>>>> DM1105_GPIOVAL, set GPIO17 to HIGH
>>>>
>>>> But you have not to change this.
>>>> Right way is to write another entry in cards structure and so on.
>>>> Better leave it to me.
>>>>
>>>> Regards
>>>> Igor
>>>>       
>>> Thanks for all your help, I understand better now.  I have moved to 
>>> code
>>> like that at the bottom.  It still doesn't work, but feels a lot 
>>> closer.
>>>
>>> Before I keep playing with values, I want to check I'm on the right 
>>> track.
>>> Does it look right?  Specific questions:
>>> 1. I see there is a hw_init function.  Should I be using that?  I 
>>> put the
>>> logic into fe_attach because there was already card-specific logic in
>>> there.  But this feels like hw initialisation.
>>>
>>> 2. Should I set the control to input or output?  I'm assuming input 
>>> = 1.
>>>
>>> 3. Would pin 15 be numbered from the left or right - is it 0x4, or 
>>> 0x2000?
>>>
>>> Thanks,
>>>
>>> Paul
>>>
>>> *** dm1105.c.old        2010-01-13 16:15:00.000000000 +1100
>>> --- dm1105.c    2010-01-21 08:13:14.000000000 +1100
>>> ***************
>>> *** 51,56 ****
>>> --- 51,57 ----
>>>   #define DM1105_BOARD_DVBWORLD_2002    1
>>>   #define DM1105_BOARD_DVBWORLD_2004    2
>>>   #define DM1105_BOARD_AXESS_DM05               3
>>> + #define DM1105_BOARD_UNBRANDED                4
>>>
>>>   /* ----------------------------------------------- */
>>>   /*
>>> ***************
>>> *** 171,176 ****
>>> --- 172,181 ----
>>>   #define DM05_LNB_13V                          0x00020000
>>>   #define DM05_LNB_18V                          0x00030000
>>>
>>> + /* GPIO's for demod reset for unbranded 195d:1105 */
>>> + #define UNBRANDED_DEMOD_MASK                  0x00008000
>>> + #define UNBRANDED_DEMOD_RESET                 0x00008000
>>> +
>>>   static unsigned int card[]  = {[0 ... 3] = UNSET };
>>>   module_param_array(card,  int, NULL, 0444);
>>>   MODULE_PARM_DESC(card, "card type");
>>> ***************
>>> *** 206,211 ****
>>> --- 211,219 ----
>>>         [DM1105_BOARD_AXESS_DM05] = {
>>>                 .name           = "Axess/EasyTv DM05",
>>>         },
>>> +       [DM1105_BOARD_UNBRANDED] = {
>>> +               .name           = "Unbranded 195d:1105",
>>> +         },
>>>   };
>>>
>>>   static const struct dm1105_subid dm1105_subids[] = {
>>> ***************
>>> *** 229,234 ****
>>> --- 237,246 ----
>>>                 .subvendor = 0x195d,
>>>                 .subdevice = 0x1105,
>>>                 .card      = DM1105_BOARD_AXESS_DM05,
>>> +       }, {
>>> +               .subvendor = 0x195d,
>>> +               .subdevice = 0x1105,
>>> +               .card      = DM1105_BOARD_UNBRANDED,
>>>         },
>>>   };
>>>
>>> ***************
>>> *** 698,703 ****
>>> --- 710,727 ----
>>>                         dm1105dvb->fe->ops.set_voltage =
>>> dm1105dvb_set_voltage;
>>>
>>>                 break;
>>> +       case DM1105_BOARD_UNBRANDED:
>>> +                 printk(KERN_ERR "Attaching as board_unbranded\n");
>>> +               outl(UNBRANDED_DEMOD_MASK, dm_io_mem(DM1105_GPIOCTR));
>>> +               outl(UNBRANDED_DEMOD_RESET , 
>>> dm_io_mem(DM1105_GPIOVAL));
>>> +               dm1105dvb->fe = dvb_attach(
>>> +                       si21xx_attach, &serit_config,
>>> +                       &dm1105dvb->i2c_adap);
>>> +                       if (dm1105dvb->fe)
>>> +                               dm1105dvb->fe->ops.set_voltage =
>>> +                                       dm1105dvb_set_voltage;
>>> +
>>> +               break;
>>>         case DM1105_BOARD_DVBWORLD_2002:
>>>         case DM1105_BOARD_AXESS_DM05:
>>>         default:
>>>     
>> Some things are missed, like keep GPIO15 high in set_voltage function.
>> Try attached patch against current v4l-dvb tree with modprobe option 
>> card=4
>>     modprobe dm1105 card=4
>>   
>

--
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
  
Igor M. Liplianin Feb. 2, 2010, 4:57 p.m. UTC | #3
On 2 ??????? 2010 17:21:46 Nameer Kazzaz wrote:
> Hi Igor,
>     What do you think ? if I can help you solve this, let me know what I
> can do.
>
> Thanks
> Nameer
>
> Nameer Kazzaz wrote:
> > Hi there,
> > dmesg output with patched dm1105.c against current v4l-dvb 'modprob
> > dm1105 card=4'
> >
> > dm1105 0000:05:0f.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
> > DVB: registering new adapter (dm1105)
> > dm1105 0000:05:0f.0: MAC dd49b0dc
> > dm1105 0000:05:0f.0: could not attach frontend
> > dm1105 0000:05:0f.0: PCI INT A disabled
> >
> > Thanks
> > Nameer Kazzaz
> >
> > Igor M. Liplianin wrote:
> >> On 20 ?????? 2010 23:20:20 paul10@planar.id.au wrote:
> >>> Igor wrote:
> >>>> Oh, that is wrong. It is registers addresses, Never touch this.
> >>>>
> >>>> Let's look on that part of code:
> >>>>
> >>>> /* GPIO's for LNB power control */
> >>>> #define DM1105_LNB_MASK                         0x00000000 // later in
> >>>
> >>> code write it to
> >>>
> >>>> DM1105_GPIOCTR, all GPIO's as OUT
> >>>> #define DM1105_LNB_OFF                          0x00020000 // later in
> >>>
> >>> code write it to
> >>>
> >>>> DM1105_GPIOVAL, set GPIO17 to HIGH
> >>>>
> >>>> But you have not to change this.
> >>>> Right way is to write another entry in cards structure and so on.
> >>>> Better leave it to me.
> >>>>
> >>>> Regards
> >>>> Igor
> >>>
> >>> Thanks for all your help, I understand better now.  I have moved to
> >>> code
> >>> like that at the bottom.  It still doesn't work, but feels a lot
> >>> closer.
> >>>
> >>> Before I keep playing with values, I want to check I'm on the right
> >>> track.
> >>> Does it look right?  Specific questions:
> >>> 1. I see there is a hw_init function.  Should I be using that?  I
> >>> put the
> >>> logic into fe_attach because there was already card-specific logic in
> >>> there.  But this feels like hw initialisation.
> >>>
> >>> 2. Should I set the control to input or output?  I'm assuming input
> >>> = 1.
> >>>
> >>> 3. Would pin 15 be numbered from the left or right - is it 0x4, or
> >>> 0x2000?
> >>>
> >>> Thanks,
> >>>
> >>> Paul
> >>>
> >>> *** dm1105.c.old        2010-01-13 16:15:00.000000000 +1100
> >>> --- dm1105.c    2010-01-21 08:13:14.000000000 +1100
> >>> ***************
> >>> *** 51,56 ****
> >>> --- 51,57 ----
> >>>   #define DM1105_BOARD_DVBWORLD_2002    1
> >>>   #define DM1105_BOARD_DVBWORLD_2004    2
> >>>   #define DM1105_BOARD_AXESS_DM05               3
> >>> + #define DM1105_BOARD_UNBRANDED                4
> >>>
> >>>   /* ----------------------------------------------- */
> >>>   /*
> >>> ***************
> >>> *** 171,176 ****
> >>> --- 172,181 ----
> >>>   #define DM05_LNB_13V                          0x00020000
> >>>   #define DM05_LNB_18V                          0x00030000
> >>>
> >>> + /* GPIO's for demod reset for unbranded 195d:1105 */
> >>> + #define UNBRANDED_DEMOD_MASK                  0x00008000
> >>> + #define UNBRANDED_DEMOD_RESET                 0x00008000
> >>> +
> >>>   static unsigned int card[]  = {[0 ... 3] = UNSET };
> >>>   module_param_array(card,  int, NULL, 0444);
> >>>   MODULE_PARM_DESC(card, "card type");
> >>> ***************
> >>> *** 206,211 ****
> >>> --- 211,219 ----
> >>>         [DM1105_BOARD_AXESS_DM05] = {
> >>>                 .name           = "Axess/EasyTv DM05",
> >>>         },
> >>> +       [DM1105_BOARD_UNBRANDED] = {
> >>> +               .name           = "Unbranded 195d:1105",
> >>> +         },
> >>>   };
> >>>
> >>>   static const struct dm1105_subid dm1105_subids[] = {
> >>> ***************
> >>> *** 229,234 ****
> >>> --- 237,246 ----
> >>>                 .subvendor = 0x195d,
> >>>                 .subdevice = 0x1105,
> >>>                 .card      = DM1105_BOARD_AXESS_DM05,
> >>> +       }, {
> >>> +               .subvendor = 0x195d,
> >>> +               .subdevice = 0x1105,
> >>> +               .card      = DM1105_BOARD_UNBRANDED,
> >>>         },
> >>>   };
> >>>
> >>> ***************
> >>> *** 698,703 ****
> >>> --- 710,727 ----
> >>>                         dm1105dvb->fe->ops.set_voltage =
> >>> dm1105dvb_set_voltage;
> >>>
> >>>                 break;
> >>> +       case DM1105_BOARD_UNBRANDED:
> >>> +                 printk(KERN_ERR "Attaching as board_unbranded\n");
> >>> +               outl(UNBRANDED_DEMOD_MASK, dm_io_mem(DM1105_GPIOCTR));
> >>> +               outl(UNBRANDED_DEMOD_RESET ,
> >>> dm_io_mem(DM1105_GPIOVAL));
> >>> +               dm1105dvb->fe = dvb_attach(
> >>> +                       si21xx_attach, &serit_config,
> >>> +                       &dm1105dvb->i2c_adap);
> >>> +                       if (dm1105dvb->fe)
> >>> +                               dm1105dvb->fe->ops.set_voltage =
> >>> +                                       dm1105dvb_set_voltage;
> >>> +
> >>> +               break;
> >>>         case DM1105_BOARD_DVBWORLD_2002:
> >>>         case DM1105_BOARD_AXESS_DM05:
> >>>         default:
> >>
> >> Some things are missed, like keep GPIO15 high in set_voltage function.
> >> Try attached patch against current v4l-dvb tree with modprobe option
> >> card=4
> >>     modprobe dm1105 card=4
Hi Nameer,
You can modify sended by me patch to guess GPIO pin. Simply try all of them, it is only 17. 
Just replace all appearances DM1105_GPIO(15) with number you want.
  
Nameer Kazzaz Feb. 2, 2010, 5:16 p.m. UTC | #4
Igor M. Liplianin wrote:
> On 2 ??????? 2010 17:21:46 Nameer Kazzaz wrote:
>   
>> Hi Igor,
>>     What do you think ? if I can help you solve this, let me know what I
>> can do.
>>
>> Thanks
>> Nameer
>>
>> Nameer Kazzaz wrote:
>>     
>>> Hi there,
>>> dmesg output with patched dm1105.c against current v4l-dvb 'modprob
>>> dm1105 card=4'
>>>
>>> dm1105 0000:05:0f.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
>>> DVB: registering new adapter (dm1105)
>>> dm1105 0000:05:0f.0: MAC dd49b0dc
>>> dm1105 0000:05:0f.0: could not attach frontend
>>> dm1105 0000:05:0f.0: PCI INT A disabled
>>>
>>> Thanks
>>> Nameer Kazzaz
>>>
>>> Igor M. Liplianin wrote:
>>>       
>>>> On 20 ?????? 2010 23:20:20 paul10@planar.id.au wrote:
>>>>         
>>>>> Igor wrote:
>>>>>           
>>>>>> Oh, that is wrong. It is registers addresses, Never touch this.
>>>>>>
>>>>>> Let's look on that part of code:
>>>>>>
>>>>>> /* GPIO's for LNB power control */
>>>>>> #define DM1105_LNB_MASK                         0x00000000 // later in
>>>>>>             
>>>>> code write it to
>>>>>
>>>>>           
>>>>>> DM1105_GPIOCTR, all GPIO's as OUT
>>>>>> #define DM1105_LNB_OFF                          0x00020000 // later in
>>>>>>             
>>>>> code write it to
>>>>>
>>>>>           
>>>>>> DM1105_GPIOVAL, set GPIO17 to HIGH
>>>>>>
>>>>>> But you have not to change this.
>>>>>> Right way is to write another entry in cards structure and so on.
>>>>>> Better leave it to me.
>>>>>>
>>>>>> Regards
>>>>>> Igor
>>>>>>             
>>>>> Thanks for all your help, I understand better now.  I have moved to
>>>>> code
>>>>> like that at the bottom.  It still doesn't work, but feels a lot
>>>>> closer.
>>>>>
>>>>> Before I keep playing with values, I want to check I'm on the right
>>>>> track.
>>>>> Does it look right?  Specific questions:
>>>>> 1. I see there is a hw_init function.  Should I be using that?  I
>>>>> put the
>>>>> logic into fe_attach because there was already card-specific logic in
>>>>> there.  But this feels like hw initialisation.
>>>>>
>>>>> 2. Should I set the control to input or output?  I'm assuming input
>>>>> = 1.
>>>>>
>>>>> 3. Would pin 15 be numbered from the left or right - is it 0x4, or
>>>>> 0x2000?
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Paul
>>>>>
>>>>> *** dm1105.c.old        2010-01-13 16:15:00.000000000 +1100
>>>>> --- dm1105.c    2010-01-21 08:13:14.000000000 +1100
>>>>> ***************
>>>>> *** 51,56 ****
>>>>> --- 51,57 ----
>>>>>   #define DM1105_BOARD_DVBWORLD_2002    1
>>>>>   #define DM1105_BOARD_DVBWORLD_2004    2
>>>>>   #define DM1105_BOARD_AXESS_DM05               3
>>>>> + #define DM1105_BOARD_UNBRANDED                4
>>>>>
>>>>>   /* ----------------------------------------------- */
>>>>>   /*
>>>>> ***************
>>>>> *** 171,176 ****
>>>>> --- 172,181 ----
>>>>>   #define DM05_LNB_13V                          0x00020000
>>>>>   #define DM05_LNB_18V                          0x00030000
>>>>>
>>>>> + /* GPIO's for demod reset for unbranded 195d:1105 */
>>>>> + #define UNBRANDED_DEMOD_MASK                  0x00008000
>>>>> + #define UNBRANDED_DEMOD_RESET                 0x00008000
>>>>> +
>>>>>   static unsigned int card[]  = {[0 ... 3] = UNSET };
>>>>>   module_param_array(card,  int, NULL, 0444);
>>>>>   MODULE_PARM_DESC(card, "card type");
>>>>> ***************
>>>>> *** 206,211 ****
>>>>> --- 211,219 ----
>>>>>         [DM1105_BOARD_AXESS_DM05] = {
>>>>>                 .name           = "Axess/EasyTv DM05",
>>>>>         },
>>>>> +       [DM1105_BOARD_UNBRANDED] = {
>>>>> +               .name           = "Unbranded 195d:1105",
>>>>> +         },
>>>>>   };
>>>>>
>>>>>   static const struct dm1105_subid dm1105_subids[] = {
>>>>> ***************
>>>>> *** 229,234 ****
>>>>> --- 237,246 ----
>>>>>                 .subvendor = 0x195d,
>>>>>                 .subdevice = 0x1105,
>>>>>                 .card      = DM1105_BOARD_AXESS_DM05,
>>>>> +       }, {
>>>>> +               .subvendor = 0x195d,
>>>>> +               .subdevice = 0x1105,
>>>>> +               .card      = DM1105_BOARD_UNBRANDED,
>>>>>         },
>>>>>   };
>>>>>
>>>>> ***************
>>>>> *** 698,703 ****
>>>>> --- 710,727 ----
>>>>>                         dm1105dvb->fe->ops.set_voltage =
>>>>> dm1105dvb_set_voltage;
>>>>>
>>>>>                 break;
>>>>> +       case DM1105_BOARD_UNBRANDED:
>>>>> +                 printk(KERN_ERR "Attaching as board_unbranded\n");
>>>>> +               outl(UNBRANDED_DEMOD_MASK, dm_io_mem(DM1105_GPIOCTR));
>>>>> +               outl(UNBRANDED_DEMOD_RESET ,
>>>>> dm_io_mem(DM1105_GPIOVAL));
>>>>> +               dm1105dvb->fe = dvb_attach(
>>>>> +                       si21xx_attach, &serit_config,
>>>>> +                       &dm1105dvb->i2c_adap);
>>>>> +                       if (dm1105dvb->fe)
>>>>> +                               dm1105dvb->fe->ops.set_voltage =
>>>>> +                                       dm1105dvb_set_voltage;
>>>>> +
>>>>> +               break;
>>>>>         case DM1105_BOARD_DVBWORLD_2002:
>>>>>         case DM1105_BOARD_AXESS_DM05:
>>>>>         default:
>>>>>           
>>>> Some things are missed, like keep GPIO15 high in set_voltage function.
>>>> Try attached patch against current v4l-dvb tree with modprobe option
>>>> card=4
>>>>     modprobe dm1105 card=4
>>>>         
> Hi Nameer,
> You can modify sended by me patch to guess GPIO pin. Simply try all of them, it is only 17. 
> Just replace all appearances DM1105_GPIO(15) with number you want.
>   
Ok I will do that.

Thanks
Nameer
--
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
  
Nameer Kazzaz Feb. 2, 2010, 10:07 p.m. UTC | #5
Nameer Kazzaz wrote:
> Igor M. Liplianin wrote:
>> On 2 ??????? 2010 17:21:46 Nameer Kazzaz wrote:
>>  
>>> Hi Igor,
>>>     What do you think ? if I can help you solve this, let me know 
>>> what I
>>> can do.
>>>
>>> Thanks
>>> Nameer
>>>
>>> Nameer Kazzaz wrote:
>>>    
>>>> Hi there,
>>>> dmesg output with patched dm1105.c against current v4l-dvb 'modprob
>>>> dm1105 card=4'
>>>>
>>>> dm1105 0000:05:0f.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
>>>> DVB: registering new adapter (dm1105)
>>>> dm1105 0000:05:0f.0: MAC dd49b0dc
>>>> dm1105 0000:05:0f.0: could not attach frontend
>>>> dm1105 0000:05:0f.0: PCI INT A disabled
>>>>
>>>> Thanks
>>>> Nameer Kazzaz
>>>>
>>>> Igor M. Liplianin wrote:
>>>>      
>>>>> On 20 ?????? 2010 23:20:20 paul10@planar.id.au wrote:
>>>>>        
>>>>>> Igor wrote:
>>>>>>          
>>>>>>> Oh, that is wrong. It is registers addresses, Never touch this.
>>>>>>>
>>>>>>> Let's look on that part of code:
>>>>>>>
>>>>>>> /* GPIO's for LNB power control */
>>>>>>> #define DM1105_LNB_MASK                         0x00000000 // 
>>>>>>> later in
>>>>>>>             
>>>>>> code write it to
>>>>>>
>>>>>>          
>>>>>>> DM1105_GPIOCTR, all GPIO's as OUT
>>>>>>> #define DM1105_LNB_OFF                          0x00020000 // 
>>>>>>> later in
>>>>>>>             
>>>>>> code write it to
>>>>>>
>>>>>>          
>>>>>>> DM1105_GPIOVAL, set GPIO17 to HIGH
>>>>>>>
>>>>>>> But you have not to change this.
>>>>>>> Right way is to write another entry in cards structure and so on.
>>>>>>> Better leave it to me.
>>>>>>>
>>>>>>> Regards
>>>>>>> Igor
>>>>>>>             
>>>>>> Thanks for all your help, I understand better now.  I have moved to
>>>>>> code
>>>>>> like that at the bottom.  It still doesn't work, but feels a lot
>>>>>> closer.
>>>>>>
>>>>>> Before I keep playing with values, I want to check I'm on the right
>>>>>> track.
>>>>>> Does it look right?  Specific questions:
>>>>>> 1. I see there is a hw_init function.  Should I be using that?  I
>>>>>> put the
>>>>>> logic into fe_attach because there was already card-specific 
>>>>>> logic in
>>>>>> there.  But this feels like hw initialisation.
>>>>>>
>>>>>> 2. Should I set the control to input or output?  I'm assuming input
>>>>>> = 1.
>>>>>>
>>>>>> 3. Would pin 15 be numbered from the left or right - is it 0x4, or
>>>>>> 0x2000?
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> Paul
>>>>>>
>>>>>> *** dm1105.c.old        2010-01-13 16:15:00.000000000 +1100
>>>>>> --- dm1105.c    2010-01-21 08:13:14.000000000 +1100
>>>>>> ***************
>>>>>> *** 51,56 ****
>>>>>> --- 51,57 ----
>>>>>>   #define DM1105_BOARD_DVBWORLD_2002    1
>>>>>>   #define DM1105_BOARD_DVBWORLD_2004    2
>>>>>>   #define DM1105_BOARD_AXESS_DM05               3
>>>>>> + #define DM1105_BOARD_UNBRANDED                4
>>>>>>
>>>>>>   /* ----------------------------------------------- */
>>>>>>   /*
>>>>>> ***************
>>>>>> *** 171,176 ****
>>>>>> --- 172,181 ----
>>>>>>   #define DM05_LNB_13V                          0x00020000
>>>>>>   #define DM05_LNB_18V                          0x00030000
>>>>>>
>>>>>> + /* GPIO's for demod reset for unbranded 195d:1105 */
>>>>>> + #define UNBRANDED_DEMOD_MASK                  0x00008000
>>>>>> + #define UNBRANDED_DEMOD_RESET                 0x00008000
>>>>>> +
>>>>>>   static unsigned int card[]  = {[0 ... 3] = UNSET };
>>>>>>   module_param_array(card,  int, NULL, 0444);
>>>>>>   MODULE_PARM_DESC(card, "card type");
>>>>>> ***************
>>>>>> *** 206,211 ****
>>>>>> --- 211,219 ----
>>>>>>         [DM1105_BOARD_AXESS_DM05] = {
>>>>>>                 .name           = "Axess/EasyTv DM05",
>>>>>>         },
>>>>>> +       [DM1105_BOARD_UNBRANDED] = {
>>>>>> +               .name           = "Unbranded 195d:1105",
>>>>>> +         },
>>>>>>   };
>>>>>>
>>>>>>   static const struct dm1105_subid dm1105_subids[] = {
>>>>>> ***************
>>>>>> *** 229,234 ****
>>>>>> --- 237,246 ----
>>>>>>                 .subvendor = 0x195d,
>>>>>>                 .subdevice = 0x1105,
>>>>>>                 .card      = DM1105_BOARD_AXESS_DM05,
>>>>>> +       }, {
>>>>>> +               .subvendor = 0x195d,
>>>>>> +               .subdevice = 0x1105,
>>>>>> +               .card      = DM1105_BOARD_UNBRANDED,
>>>>>>         },
>>>>>>   };
>>>>>>
>>>>>> ***************
>>>>>> *** 698,703 ****
>>>>>> --- 710,727 ----
>>>>>>                         dm1105dvb->fe->ops.set_voltage =
>>>>>> dm1105dvb_set_voltage;
>>>>>>
>>>>>>                 break;
>>>>>> +       case DM1105_BOARD_UNBRANDED:
>>>>>> +                 printk(KERN_ERR "Attaching as board_unbranded\n");
>>>>>> +               outl(UNBRANDED_DEMOD_MASK, 
>>>>>> dm_io_mem(DM1105_GPIOCTR));
>>>>>> +               outl(UNBRANDED_DEMOD_RESET ,
>>>>>> dm_io_mem(DM1105_GPIOVAL));
>>>>>> +               dm1105dvb->fe = dvb_attach(
>>>>>> +                       si21xx_attach, &serit_config,
>>>>>> +                       &dm1105dvb->i2c_adap);
>>>>>> +                       if (dm1105dvb->fe)
>>>>>> +                               dm1105dvb->fe->ops.set_voltage =
>>>>>> +                                       dm1105dvb_set_voltage;
>>>>>> +
>>>>>> +               break;
>>>>>>         case DM1105_BOARD_DVBWORLD_2002:
>>>>>>         case DM1105_BOARD_AXESS_DM05:
>>>>>>         default:
>>>>>>           
>>>>> Some things are missed, like keep GPIO15 high in set_voltage 
>>>>> function.
>>>>> Try attached patch against current v4l-dvb tree with modprobe option
>>>>> card=4
>>>>>     modprobe dm1105 card=4
>>>>>         
>> Hi Nameer,
>> You can modify sended by me patch to guess GPIO pin. Simply try all 
>> of them, it is only 17. Just replace all appearances DM1105_GPIO(15) 
>> with number you want.
>>   
> Ok I will do that.
>
> Thanks
> Nameer
Hi Igor,
    I tried all DM1105_GPIO(0) to DM1105_GPIO(17), same error. Any Idea ?

Nameer
--
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
  
Igor M. Liplianin Feb. 3, 2010, 5:41 p.m. UTC | #6
On 3 ??????? 2010 00:07:36 Nameer Kazzaz wrote:
> Nameer Kazzaz wrote:
> > Igor M. Liplianin wrote:
> >> On 2 ??????? 2010 17:21:46 Nameer Kazzaz wrote:
> >>> Hi Igor,
> >>>     What do you think ? if I can help you solve this, let me know
> >>> what I
> >>> can do.
> >>>
> >>> Thanks
> >>> Nameer
> >>>
> >>> Nameer Kazzaz wrote:
> >>>> Hi there,
> >>>> dmesg output with patched dm1105.c against current v4l-dvb 'modprob
> >>>> dm1105 card=4'
> >>>>
> >>>> dm1105 0000:05:0f.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
> >>>> DVB: registering new adapter (dm1105)
> >>>> dm1105 0000:05:0f.0: MAC dd49b0dc
> >>>> dm1105 0000:05:0f.0: could not attach frontend
> >>>> dm1105 0000:05:0f.0: PCI INT A disabled
> >>>>
> >>>> Thanks
> >>>> Nameer Kazzaz
> >>>>
> >>>> Igor M. Liplianin wrote:
> >>>>> On 20 ?????? 2010 23:20:20 paul10@planar.id.au wrote:
> >>>>>> Igor wrote:
> >>>>>>> Oh, that is wrong. It is registers addresses, Never touch this.
> >>>>>>>
> >>>>>>> Let's look on that part of code:
> >>>>>>>
> >>>>>>> /* GPIO's for LNB power control */
> >>>>>>> #define DM1105_LNB_MASK                         0x00000000 //
> >>>>>>> later in
> >>>>>>
> >>>>>> code write it to
> >>>>>>
> >>>>>>> DM1105_GPIOCTR, all GPIO's as OUT
> >>>>>>> #define DM1105_LNB_OFF                          0x00020000 //
> >>>>>>> later in
> >>>>>>
> >>>>>> code write it to
> >>>>>>
> >>>>>>> DM1105_GPIOVAL, set GPIO17 to HIGH
> >>>>>>>
> >>>>>>> But you have not to change this.
> >>>>>>> Right way is to write another entry in cards structure and so on.
> >>>>>>> Better leave it to me.
> >>>>>>>
> >>>>>>> Regards
> >>>>>>> Igor
> >>>>>>
> >>>>>> Thanks for all your help, I understand better now.  I have moved to
> >>>>>> code
> >>>>>> like that at the bottom.  It still doesn't work, but feels a lot
> >>>>>> closer.
> >>>>>>
> >>>>>> Before I keep playing with values, I want to check I'm on the right
> >>>>>> track.
> >>>>>> Does it look right?  Specific questions:
> >>>>>> 1. I see there is a hw_init function.  Should I be using that?  I
> >>>>>> put the
> >>>>>> logic into fe_attach because there was already card-specific
> >>>>>> logic in
> >>>>>> there.  But this feels like hw initialisation.
> >>>>>>
> >>>>>> 2. Should I set the control to input or output?  I'm assuming input
> >>>>>> = 1.
> >>>>>>
> >>>>>> 3. Would pin 15 be numbered from the left or right - is it 0x4, or
> >>>>>> 0x2000?
> >>>>>>
> >>>>>> Thanks,
> >>>>>>
> >>>>>> Paul
> >>>>>>
> >>>>>> *** dm1105.c.old        2010-01-13 16:15:00.000000000 +1100
> >>>>>> --- dm1105.c    2010-01-21 08:13:14.000000000 +1100
> >>>>>> ***************
> >>>>>> *** 51,56 ****
> >>>>>> --- 51,57 ----
> >>>>>>   #define DM1105_BOARD_DVBWORLD_2002    1
> >>>>>>   #define DM1105_BOARD_DVBWORLD_2004    2
> >>>>>>   #define DM1105_BOARD_AXESS_DM05               3
> >>>>>> + #define DM1105_BOARD_UNBRANDED                4
> >>>>>>
> >>>>>>   /* ----------------------------------------------- */
> >>>>>>   /*
> >>>>>> ***************
> >>>>>> *** 171,176 ****
> >>>>>> --- 172,181 ----
> >>>>>>   #define DM05_LNB_13V                          0x00020000
> >>>>>>   #define DM05_LNB_18V                          0x00030000
> >>>>>>
> >>>>>> + /* GPIO's for demod reset for unbranded 195d:1105 */
> >>>>>> + #define UNBRANDED_DEMOD_MASK                  0x00008000
> >>>>>> + #define UNBRANDED_DEMOD_RESET                 0x00008000
> >>>>>> +
> >>>>>>   static unsigned int card[]  = {[0 ... 3] = UNSET };
> >>>>>>   module_param_array(card,  int, NULL, 0444);
> >>>>>>   MODULE_PARM_DESC(card, "card type");
> >>>>>> ***************
> >>>>>> *** 206,211 ****
> >>>>>> --- 211,219 ----
> >>>>>>         [DM1105_BOARD_AXESS_DM05] = {
> >>>>>>                 .name           = "Axess/EasyTv DM05",
> >>>>>>         },
> >>>>>> +       [DM1105_BOARD_UNBRANDED] = {
> >>>>>> +               .name           = "Unbranded 195d:1105",
> >>>>>> +         },
> >>>>>>   };
> >>>>>>
> >>>>>>   static const struct dm1105_subid dm1105_subids[] = {
> >>>>>> ***************
> >>>>>> *** 229,234 ****
> >>>>>> --- 237,246 ----
> >>>>>>                 .subvendor = 0x195d,
> >>>>>>                 .subdevice = 0x1105,
> >>>>>>                 .card      = DM1105_BOARD_AXESS_DM05,
> >>>>>> +       }, {
> >>>>>> +               .subvendor = 0x195d,
> >>>>>> +               .subdevice = 0x1105,
> >>>>>> +               .card      = DM1105_BOARD_UNBRANDED,
> >>>>>>         },
> >>>>>>   };
> >>>>>>
> >>>>>> ***************
> >>>>>> *** 698,703 ****
> >>>>>> --- 710,727 ----
> >>>>>>                         dm1105dvb->fe->ops.set_voltage =
> >>>>>> dm1105dvb_set_voltage;
> >>>>>>
> >>>>>>                 break;
> >>>>>> +       case DM1105_BOARD_UNBRANDED:
> >>>>>> +                 printk(KERN_ERR "Attaching as board_unbranded\n");
> >>>>>> +               outl(UNBRANDED_DEMOD_MASK,
> >>>>>> dm_io_mem(DM1105_GPIOCTR));
> >>>>>> +               outl(UNBRANDED_DEMOD_RESET ,
> >>>>>> dm_io_mem(DM1105_GPIOVAL));
> >>>>>> +               dm1105dvb->fe = dvb_attach(
> >>>>>> +                       si21xx_attach, &serit_config,
> >>>>>> +                       &dm1105dvb->i2c_adap);
> >>>>>> +                       if (dm1105dvb->fe)
> >>>>>> +                               dm1105dvb->fe->ops.set_voltage =
> >>>>>> +                                       dm1105dvb_set_voltage;
> >>>>>> +
> >>>>>> +               break;
> >>>>>>         case DM1105_BOARD_DVBWORLD_2002:
> >>>>>>         case DM1105_BOARD_AXESS_DM05:
> >>>>>>         default:
> >>>>>
> >>>>> Some things are missed, like keep GPIO15 high in set_voltage
> >>>>> function.
> >>>>> Try attached patch against current v4l-dvb tree with modprobe option
> >>>>> card=4
> >>>>>     modprobe dm1105 card=4
> >>
> >> Hi Nameer,
> >> You can modify sended by me patch to guess GPIO pin. Simply try all
> >> of them, it is only 17. Just replace all appearances DM1105_GPIO(15)
> >> with number you want.
> >
> > Ok I will do that.
> >
> > Thanks
> > Nameer
>
> Hi Igor,
>     I tried all DM1105_GPIO(0) to DM1105_GPIO(17), same error. Any Idea ?
>
> Nameer
Hi

I have some ideas, for example, to add to driver i2c_scan function.
  

Patch

diff -r d6520e486ee6 linux/drivers/media/dvb/dm1105/dm1105.c
--- a/linux/drivers/media/dvb/dm1105/dm1105.c	Sat Jan 30 01:27:34 2010 -0200
+++ b/linux/drivers/media/dvb/dm1105/dm1105.c	Sun Jan 31 15:35:30 2010 +0200
@@ -52,6 +52,7 @@ 
 #define DM1105_BOARD_DVBWORLD_2002	1
 #define DM1105_BOARD_DVBWORLD_2004	2
 #define DM1105_BOARD_AXESS_DM05		3
+#define DM1105_BOARD_UNBRANDED_GPIO15	4
 
 /* ----------------------------------------------- */
 /*
@@ -207,6 +208,9 @@ 
 	[DM1105_BOARD_AXESS_DM05] = {
 		.name		= "Axess/EasyTv DM05",
 	},
+	[DM1105_BOARD_UNBRANDED_GPIO15] = {
+		.name		= "Unbranded Board GPIO15",
+	},
 };
 
 static const struct dm1105_subid dm1105_subids[] = {
@@ -327,6 +331,8 @@ 
 #define dm_setl(reg, bit)	dm_andorl((reg), (bit), (bit))
 #define dm_clearl(reg, bit)	dm_andorl((reg), (bit), 0)
 
+#define DM1105_GPIO(x)		(1 << x)
+
 static int dm1105_i2c_xfer(struct i2c_adapter *i2c_adap,
 			    struct i2c_msg *msgs, int num)
 {
@@ -441,6 +447,12 @@ 
 	u32 lnb_mask, lnb_13v, lnb_18v, lnb_off;
 
 	switch (dev->boardnr) {
+	case DM1105_BOARD_UNBRANDED_GPIO15:
+		lnb_mask = DM05_LNB_MASK;
+		lnb_off = DM05_LNB_OFF | DM1105_GPIO(15);/* keep GPIO15 high */
+		lnb_13v = DM05_LNB_13V | DM1105_GPIO(15);
+		lnb_18v = DM05_LNB_18V | DM1105_GPIO(15);
+		break;
 	case DM1105_BOARD_AXESS_DM05:
 		lnb_mask = DM05_LNB_MASK;
 		lnb_off = DM05_LNB_OFF;
@@ -758,6 +770,14 @@ 
 			dev->fe->ops.set_voltage = dm1105_set_voltage;
 
 		break;
+	case DM1105_BOARD_UNBRANDED_GPIO15:
+		/* reset frontend */
+		dm_clearl(DM1105_GPIOCTR, DM1105_GPIO(15));
+		dm_clearl(DM1105_GPIOVAL, DM1105_GPIO(15));
+		msleep(10);
+		dm_setl(DM1105_GPIOVAL, DM1105_GPIO(15));
+		msleep(100);
+	/* break omitted intentionally */
 	case DM1105_BOARD_DVBWORLD_2002:
 	case DM1105_BOARD_AXESS_DM05:
 	default: