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

Commit 7992018d authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'master' of ssh://master.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb:
  V4L/DVB (5691): Ov7670: reset clkrc in rgb565 mode
  V4L/DVB (5690): Cafe_ccic: Properly power down the sensor
  V4L/DVB (5680): Tuner-simple.c fix suport for SECAM with FI1216MF
  V4L/DVB (5630): Dvb-core: Handle failures to create devices
  V4L/DVB (5639a): Fix dst usage count
  V4L/DVB (5670): Adding new fields to v4l2_pix_format broke the ABI, reverted that change
  V4L/DVB (5640): Fix: em28xx shouldn't be selecting VIDEO_BUF
  V4L/DVB (5639): Fix Kconfig dependencies for ivtv
parents 5fd52203 edd75ede
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -1721,9 +1721,6 @@ static void dst_release(struct dvb_frontend *fe)
		symbol_put(dst_ca_attach);
#endif
	}
#ifdef CONFIG_DVB_CORE_ATTACH
	symbol_put(dst_attach);
#endif
	kfree(state);
}

+11 −4
Original line number Diff line number Diff line
@@ -200,7 +200,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
{
	struct dvb_device *dvbdev;
	struct file_operations *dvbdevfops;

	struct class_device *clsdev;
	int id;

	mutex_lock(&dvbdev_register_lock);
@@ -242,8 +242,15 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,

	mutex_unlock(&dvbdev_register_lock);

	class_device_create(dvb_class, NULL, MKDEV(DVB_MAJOR, nums2minor(adap->num, type, id)),
			    adap->device, "dvb%d.%s%d", adap->num, dnames[type], id);
	clsdev = class_device_create(dvb_class, NULL, MKDEV(DVB_MAJOR,
				     nums2minor(adap->num, type, id)),
				     adap->device, "dvb%d.%s%d", adap->num,
				     dnames[type], id);
	if (IS_ERR(clsdev)) {
		printk(KERN_ERR "%s: failed to create device dvb%d.%s%d (%ld)\n",
		       __FUNCTION__, adap->num, dnames[type], id, PTR_ERR(clsdev));
		return PTR_ERR(clsdev);
	}

	dprintk("DVB: register adapter%d/%s%d @ minor: %i (0x%02x)\n",
		adap->num, dnames[type], id, nums2minor(adap->num, type, id),
@@ -431,7 +438,7 @@ static void __exit exit_dvbdev(void)
	unregister_chrdev_region(MKDEV(DVB_MAJOR, 0), MAX_DVB_MINORS);
}

module_init(init_dvbdev);
subsys_initcall(init_dvbdev);
module_exit(exit_dvbdev);

MODULE_DESCRIPTION("DVB Core Driver");
+6 −0
Original line number Diff line number Diff line
@@ -150,6 +150,12 @@
#define REG_GL_IMASK   0x300c  /* Interrupt mask register */
#define   GIMSK_CCIC_EN          0x00000004    /* CCIC Interrupt enable */

#define REG_GL_FCR	0x3038  /* GPIO functional control register */
#define	  GFCR_GPIO_ON	  0x08		/* Camera GPIO enabled */
#define REG_GL_GPIOR	0x315c	/* GPIO register */
#define   GGPIO_OUT  		0x80000	/* GPIO output */
#define   GGPIO_VAL  		0x00008	/* Output pin value */

#define REG_LEN                REG_GL_IMASK + 4


+17 −1
Original line number Diff line number Diff line
@@ -774,6 +774,12 @@ static void cafe_ctlr_power_up(struct cafe_camera *cam)

	spin_lock_irqsave(&cam->dev_lock, flags);
	cafe_reg_clear_bit(cam, REG_CTRL1, C1_PWRDWN);
	/*
	 * Part one of the sensor dance: turn the global
	 * GPIO signal on.
	 */
	cafe_reg_write(cam, REG_GL_FCR, GFCR_GPIO_ON);
	cafe_reg_write(cam, REG_GL_GPIOR, GGPIO_OUT|GGPIO_VAL);
	/*
	 * Put the sensor into operational mode (assumes OLPC-style
	 * wiring).  Control 0 is reset - set to 1 to operate.
@@ -784,6 +790,7 @@ static void cafe_ctlr_power_up(struct cafe_camera *cam)
	cafe_reg_write(cam, REG_GPR, GPR_C1EN|GPR_C0EN|GPR_C0);
//	mdelay(1); /* Enough? */
	spin_unlock_irqrestore(&cam->dev_lock, flags);
	msleep(5); /* Just to be sure */
}

static void cafe_ctlr_power_down(struct cafe_camera *cam)
@@ -792,6 +799,8 @@ static void cafe_ctlr_power_down(struct cafe_camera *cam)

	spin_lock_irqsave(&cam->dev_lock, flags);
	cafe_reg_write(cam, REG_GPR, GPR_C1EN|GPR_C0EN|GPR_C1);
	cafe_reg_write(cam, REG_GL_FCR, GFCR_GPIO_ON);
	cafe_reg_write(cam, REG_GL_GPIOR, GGPIO_OUT);
	cafe_reg_set_bit(cam, REG_CTRL1, C1_PWRDWN);
	spin_unlock_irqrestore(&cam->dev_lock, flags);
}
@@ -851,6 +860,7 @@ static int cafe_cam_init(struct cafe_camera *cam)
	ret = 0;
	cam->state = S_IDLE;
  out:
	cafe_ctlr_power_down(cam);
	mutex_unlock(&cam->s_mutex);
	return ret;
}
@@ -2103,10 +2113,16 @@ static int cafe_pci_probe(struct pci_dev *pdev,
	ret = request_irq(pdev->irq, cafe_irq, IRQF_SHARED, "cafe-ccic", cam);
	if (ret)
		goto out_iounmap;
	/*
	 * Initialize the controller and leave it powered up.  It will
	 * stay that way until the sensor driver shows up.
	 */
	cafe_ctlr_init(cam);
	cafe_ctlr_power_up(cam);
	/*
	 * Set up I2C/SMBUS communications
	 * Set up I2C/SMBUS communications.  We have to drop the mutex here
	 * because the sensor could attach in this call chain, leading to
	 * unsightly deadlocks.
	 */
	mutex_unlock(&cam->s_mutex);  /* attach can deadlock */
	ret = cafe_smbus_setup(cam);
+1 −2
Original line number Diff line number Diff line
config VIDEO_EM28XX
	tristate "Empia EM2800/2820/2840 USB video capture support"
	depends on VIDEO_V4L1 && I2C && PCI
	select VIDEO_BUF
	depends on VIDEO_V4L1 && I2C
	select VIDEO_TUNER
	select VIDEO_TVEEPROM
	select VIDEO_IR
Loading