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: