Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 91797466 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'media_fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6:
  [media] mantis_pci: remove asm/pgtable.h include
  [media] tda829x: fix regression in probe functions
  [media] mceusb: don't claim multifunction device non-IR parts
  [media] nuvoton-cir: fix wake from suspend
  [media] cx18: Add support for Hauppauge HVR-1600 models with s5h1411
  [media] ivtv: Fix corrective action taken upon DMA ERR interrupt to avoid hang
  [media] cx25840: fix probing of cx2583x chips
  [media] cx23885: Remove unused 'err:' labels to quiet compiler warning
  [media] cx23885: Revert "Check for slave nack on all transactions"
  [media] DiB7000M: add pid filtering
  [media] Fix sysfs rc protocol lookup for rc-5-sz
  [media] au0828: fix VBI handling when in V4L2 streaming mode
  [media] ir-raw: Properly initialize the IR event (BZ#27202)
  [media] s2255drv: firmware re-loading changes
  [media] Fix double free of video_device in mem2mem_testdev
  [media] DM04/QQBOX memcpy to const char fix
parents 4c418ba9 a4e36e60
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -658,13 +658,13 @@ static int tda8290_probe(struct tuner_i2c_props *i2c_props)
#define TDA8290_ID 0x89
	u8 reg = 0x1f, id;
	struct i2c_msg msg_read[] = {
		{ .addr = 0x4b, .flags = 0, .len = 1, .buf = &reg },
		{ .addr = 0x4b, .flags = I2C_M_RD, .len = 1, .buf = &id },
		{ .addr = i2c_props->addr, .flags = 0, .len = 1, .buf = &reg },
		{ .addr = i2c_props->addr, .flags = I2C_M_RD, .len = 1, .buf = &id },
	};

	/* detect tda8290 */
	if (i2c_transfer(i2c_props->adap, msg_read, 2) != 2) {
		printk(KERN_WARNING "%s: tda8290 couldn't read register 0x%02x\n",
		printk(KERN_WARNING "%s: couldn't read register 0x%02x\n",
			       __func__, reg);
		return -ENODEV;
	}
@@ -685,13 +685,13 @@ static int tda8295_probe(struct tuner_i2c_props *i2c_props)
#define TDA8295C2_ID 0x8b
	u8 reg = 0x2f, id;
	struct i2c_msg msg_read[] = {
		{ .addr = 0x4b, .flags = 0, .len = 1, .buf = &reg },
		{ .addr = 0x4b, .flags = I2C_M_RD, .len = 1, .buf = &id },
		{ .addr = i2c_props->addr, .flags = 0, .len = 1, .buf = &reg },
		{ .addr = i2c_props->addr, .flags = I2C_M_RD, .len = 1, .buf = &id },
	};

	/* detect tda8290 */
	/* detect tda8295 */
	if (i2c_transfer(i2c_props->adap, msg_read, 2) != 2) {
		printk(KERN_WARNING "%s: tda8290 couldn't read register 0x%02x\n",
		printk(KERN_WARNING "%s: couldn't read register 0x%02x\n",
			       __func__, reg);
		return -ENODEV;
	}
+19 −2
Original line number Diff line number Diff line
@@ -870,6 +870,23 @@ static int dib7070p_tuner_attach(struct dvb_usb_adapter *adap)
	return 0;
}

static int stk7700p_pid_filter(struct dvb_usb_adapter *adapter, int index,
		u16 pid, int onoff)
{
	struct dib0700_state *st = adapter->dev->priv;
	if (st->is_dib7000pc)
		return dib7000p_pid_filter(adapter->fe, index, pid, onoff);
	return dib7000m_pid_filter(adapter->fe, index, pid, onoff);
}

static int stk7700p_pid_filter_ctrl(struct dvb_usb_adapter *adapter, int onoff)
{
	struct dib0700_state *st = adapter->dev->priv;
	if (st->is_dib7000pc)
		return dib7000p_pid_filter_ctrl(adapter->fe, onoff);
	return dib7000m_pid_filter_ctrl(adapter->fe, onoff);
}

static int stk70x0p_pid_filter(struct dvb_usb_adapter *adapter, int index, u16 pid, int onoff)
{
    return dib7000p_pid_filter(adapter->fe, index, pid, onoff);
@@ -1875,8 +1892,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
			{
				.caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
				.pid_filter_count = 32,
				.pid_filter       = stk70x0p_pid_filter,
				.pid_filter_ctrl  = stk70x0p_pid_filter_ctrl,
				.pid_filter       = stk7700p_pid_filter,
				.pid_filter_ctrl  = stk7700p_pid_filter_ctrl,
				.frontend_attach  = stk7700p_frontend_attach,
				.tuner_attach     = stk7700p_tuner_attach,

+3 −3
Original line number Diff line number Diff line
@@ -659,7 +659,7 @@ static int lme2510_download_firmware(struct usb_device *dev,
}

/* Default firmware for LME2510C */
const char lme_firmware[50] = "dvb-usb-lme2510c-s7395.fw";
char lme_firmware[50] = "dvb-usb-lme2510c-s7395.fw";

static void lme_coldreset(struct usb_device *dev)
{
@@ -1006,7 +1006,7 @@ static struct dvb_usb_device_properties lme2510c_properties = {
	.caps = DVB_USB_IS_AN_I2C_ADAPTER,
	.usb_ctrl = DEVICE_SPECIFIC,
	.download_firmware = lme2510_download_firmware,
	.firmware = lme_firmware,
	.firmware = (const char *)&lme_firmware,
	.size_of_priv = sizeof(struct lme2510_state),
	.num_adapters = 1,
	.adapter = {
@@ -1109,5 +1109,5 @@ module_exit(lme2510_module_exit);

MODULE_AUTHOR("Malcolm Priestley <tvboxspy@gmail.com>");
MODULE_DESCRIPTION("LME2510(C) DVB-S USB2.0");
MODULE_VERSION("1.74");
MODULE_VERSION("1.75");
MODULE_LICENSE("GPL");
+19 −0
Original line number Diff line number Diff line
@@ -1285,6 +1285,25 @@ struct i2c_adapter * dib7000m_get_i2c_master(struct dvb_frontend *demod, enum di
}
EXPORT_SYMBOL(dib7000m_get_i2c_master);

int dib7000m_pid_filter_ctrl(struct dvb_frontend *fe, u8 onoff)
{
	struct dib7000m_state *state = fe->demodulator_priv;
	u16 val = dib7000m_read_word(state, 294 + state->reg_offs) & 0xffef;
	val |= (onoff & 0x1) << 4;
	dprintk("PID filter enabled %d", onoff);
	return dib7000m_write_word(state, 294 + state->reg_offs, val);
}
EXPORT_SYMBOL(dib7000m_pid_filter_ctrl);

int dib7000m_pid_filter(struct dvb_frontend *fe, u8 id, u16 pid, u8 onoff)
{
	struct dib7000m_state *state = fe->demodulator_priv;
	dprintk("PID filter: index %x, PID %d, OnOff %d", id, pid, onoff);
	return dib7000m_write_word(state, 300 + state->reg_offs + id,
			onoff ? (1 << 13) | pid : 0);
}
EXPORT_SYMBOL(dib7000m_pid_filter);

#if 0
/* used with some prototype boards */
int dib7000m_i2c_enumeration(struct i2c_adapter *i2c, int no_of_demods,
+15 −0
Original line number Diff line number Diff line
@@ -46,6 +46,8 @@ extern struct dvb_frontend *dib7000m_attach(struct i2c_adapter *i2c_adap,
extern struct i2c_adapter *dib7000m_get_i2c_master(struct dvb_frontend *,
						   enum dibx000_i2c_interface,
						   int);
extern int dib7000m_pid_filter(struct dvb_frontend *, u8 id, u16 pid, u8 onoff);
extern int dib7000m_pid_filter_ctrl(struct dvb_frontend *fe, u8 onoff);
#else
static inline
struct dvb_frontend *dib7000m_attach(struct i2c_adapter *i2c_adap,
@@ -63,6 +65,19 @@ struct i2c_adapter *dib7000m_get_i2c_master(struct dvb_frontend *demod,
	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
	return NULL;
}
static inline int dib7000m_pid_filter(struct dvb_frontend *fe, u8 id,
						u16 pid, u8 onoff)
{
	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
	return -ENODEV;
}

static inline int dib7000m_pid_filter_ctrl(struct dvb_frontend *fe,
						uint8_t onoff)
{
	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
	return -ENODEV;
}
#endif

/* TODO
Loading