|
@@ -324,23 +324,24 @@ static void cx18_eeprom_dump(struct cx18 *cx, unsigned char *eedata, int len)
|
|
|
/* Hauppauge card? get values from tveeprom */
|
|
|
void cx18_read_eeprom(struct cx18 *cx, struct tveeprom *tv)
|
|
|
{
|
|
|
- struct i2c_client c;
|
|
|
+ struct i2c_client *c;
|
|
|
u8 eedata[256];
|
|
|
|
|
|
- memset(&c, 0, sizeof(c));
|
|
|
- strlcpy(c.name, "cx18 tveeprom tmp", sizeof(c.name));
|
|
|
- c.adapter = &cx->i2c_adap[0];
|
|
|
- c.addr = 0xA0 >> 1;
|
|
|
+ c = kzalloc(sizeof(*c), GFP_KERNEL);
|
|
|
+
|
|
|
+ strlcpy(c->name, "cx18 tveeprom tmp", sizeof(c->name));
|
|
|
+ c->adapter = &cx->i2c_adap[0];
|
|
|
+ c->addr = 0xa0 >> 1;
|
|
|
|
|
|
memset(tv, 0, sizeof(*tv));
|
|
|
- if (tveeprom_read(&c, eedata, sizeof(eedata)))
|
|
|
- return;
|
|
|
+ if (tveeprom_read(c, eedata, sizeof(eedata)))
|
|
|
+ goto ret;
|
|
|
|
|
|
switch (cx->card->type) {
|
|
|
case CX18_CARD_HVR_1600_ESMT:
|
|
|
case CX18_CARD_HVR_1600_SAMSUNG:
|
|
|
case CX18_CARD_HVR_1600_S5H1411:
|
|
|
- tveeprom_hauppauge_analog(&c, tv, eedata);
|
|
|
+ tveeprom_hauppauge_analog(c, tv, eedata);
|
|
|
break;
|
|
|
case CX18_CARD_YUAN_MPC718:
|
|
|
case CX18_CARD_GOTVIEW_PCI_DVD3:
|
|
@@ -354,6 +355,9 @@ void cx18_read_eeprom(struct cx18 *cx, struct tveeprom *tv)
|
|
|
cx18_eeprom_dump(cx, eedata, sizeof(eedata));
|
|
|
break;
|
|
|
}
|
|
|
+
|
|
|
+ret:
|
|
|
+ kfree(c);
|
|
|
}
|
|
|
|
|
|
static void cx18_process_eeprom(struct cx18 *cx)
|