Przeglądaj źródła

Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6

* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6:
  V4L/DVB (13372): staging/go7007: fix mutex function usage for s2250
  staging/go7007: Fix compilation by re-adding the missing s2250-loader.h
  V4L/DVB (13530): Fix wrong parameter order in memset
  V4L/DVB (13481): sh_mobile_ceu_camera: fix compile warning
  V4L/DVB (13436): cxusb: Fix hang on DViCO FusionHDTV DVB-T Dual Digital 4 (rev 1)
  V4L/DVB (13412): SMS_SIANO_MDTV should depend on HAS_DMA
  V4L/DVB (13372a): MAINTAINERS: addition of gspca_gl860 driver
  V4L/DVB (13371): davinci: remove stray duplicate config pointer
  V4L/DVB (13366): em28xx: fix Reddo DVB-C USB TV Box GPIO
  V4L/DVB (13345): soc-camera: sh_mobile_ceu_camera: call pm_runtime_disable
  V4L/DVB (13344): soc-camera: properly initialise the device object when reusing
  V4L/DVB (13343): v4l: add more missing linux/sched.h includes
  V4L/DVB (13321): radio-gemtek-pci: fix double mutex_lock
Linus Torvalds 15 lat temu
rodzic
commit
a5e63931fd

+ 7 - 0
MAINTAINERS

@@ -2312,6 +2312,13 @@ T:	git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
 S:	Maintained
 S:	Maintained
 F:	drivers/media/video/gspca/finepix.c
 F:	drivers/media/video/gspca/finepix.c
 
 
+GSPCA GL860 SUBDRIVER
+M:	Olivier Lorin <o.lorin@laposte.net>
+L:	linux-media@vger.kernel.org
+T:	git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
+S:	Maintained
+F:	drivers/media/video/gspca/gl860/
+
 GSPCA M5602 SUBDRIVER
 GSPCA M5602 SUBDRIVER
 M:	Erik Andren <erik.andren@gmail.com>
 M:	Erik Andren <erik.andren@gmail.com>
 L:	linux-media@vger.kernel.org
 L:	linux-media@vger.kernel.org

+ 1 - 1
drivers/media/common/ir-functions.c

@@ -64,7 +64,7 @@ void ir_input_init(struct input_dev *dev, struct ir_input_state *ir,
 
 
 	ir->ir_type = ir_type;
 	ir->ir_type = ir_type;
 
 
-	memset(ir->ir_codes, sizeof(ir->ir_codes), 0);
+	memset(ir->ir_codes, 0, sizeof(ir->ir_codes));
 
 
 	/*
 	/*
 	 * FIXME: This is a temporary workaround to use the new IR tables
 	 * FIXME: This is a temporary workaround to use the new IR tables

+ 9 - 1
drivers/media/dvb/dvb-usb/cxusb.c

@@ -663,6 +663,14 @@ static struct zl10353_config cxusb_zl10353_xc3028_config = {
 	.parallel_ts = 1,
 	.parallel_ts = 1,
 };
 };
 
 
+static struct zl10353_config cxusb_zl10353_xc3028_config_no_i2c_gate = {
+	.demod_address = 0x0f,
+	.if2 = 45600,
+	.no_tuner = 1,
+	.parallel_ts = 1,
+	.disable_i2c_gate_ctrl = 1,
+};
+
 static struct mt352_config cxusb_mt352_xc3028_config = {
 static struct mt352_config cxusb_mt352_xc3028_config = {
 	.demod_address = 0x0f,
 	.demod_address = 0x0f,
 	.if2 = 4560,
 	.if2 = 4560,
@@ -894,7 +902,7 @@ static int cxusb_dualdig4_frontend_attach(struct dvb_usb_adapter *adap)
 	cxusb_bluebird_gpio_pulse(adap->dev, 0x02, 1);
 	cxusb_bluebird_gpio_pulse(adap->dev, 0x02, 1);
 
 
 	if ((adap->fe = dvb_attach(zl10353_attach,
 	if ((adap->fe = dvb_attach(zl10353_attach,
-				   &cxusb_zl10353_xc3028_config,
+				   &cxusb_zl10353_xc3028_config_no_i2c_gate,
 				   &adap->dev->i2c_adap)) == NULL)
 				   &adap->dev->i2c_adap)) == NULL)
 		return -EIO;
 		return -EIO;
 
 

+ 1 - 1
drivers/media/dvb/siano/Kconfig

@@ -4,7 +4,7 @@
 
 
 config SMS_SIANO_MDTV
 config SMS_SIANO_MDTV
 	tristate "Siano SMS1xxx based MDTV receiver"
 	tristate "Siano SMS1xxx based MDTV receiver"
-	depends on DVB_CORE && INPUT
+	depends on DVB_CORE && INPUT && HAS_DMA
 	---help---
 	---help---
 	  Choose Y or M here if you have MDTV receiver with a Siano chipset.
 	  Choose Y or M here if you have MDTV receiver with a Siano chipset.
 
 

+ 0 - 2
drivers/media/radio/radio-gemtek-pci.c

@@ -181,12 +181,10 @@ static void gemtek_pci_mute(struct gemtek_pci *card)
 
 
 static void gemtek_pci_unmute(struct gemtek_pci *card)
 static void gemtek_pci_unmute(struct gemtek_pci *card)
 {
 {
-	mutex_lock(&card->lock);
 	if (card->mute) {
 	if (card->mute) {
 		gemtek_pci_setfrequency(card, card->current_frequency);
 		gemtek_pci_setfrequency(card, card->current_frequency);
 		card->mute = false;
 		card->mute = false;
 	}
 	}
-	mutex_unlock(&card->lock);
 }
 }
 
 
 static int gemtek_pci_getsignal(struct gemtek_pci *card)
 static int gemtek_pci_getsignal(struct gemtek_pci *card)

+ 0 - 1
drivers/media/video/davinci/vpif_display.c

@@ -1426,7 +1426,6 @@ static __init int vpif_probe(struct platform_device *pdev)
 	struct vpif_display_config *config;
 	struct vpif_display_config *config;
 	int i, j = 0, k, q, m, err = 0;
 	int i, j = 0, k, q, m, err = 0;
 	struct i2c_adapter *i2c_adap;
 	struct i2c_adapter *i2c_adap;
-	struct vpif_config *config;
 	struct common_obj *common;
 	struct common_obj *common;
 	struct channel_obj *ch;
 	struct channel_obj *ch;
 	struct video_device *vfd;
 	struct video_device *vfd;

+ 1 - 1
drivers/media/video/em28xx/em28xx-cards.c

@@ -1584,8 +1584,8 @@ struct em28xx_board em28xx_boards[] = {
 	[EM2870_BOARD_REDDO_DVB_C_USB_BOX] = {
 	[EM2870_BOARD_REDDO_DVB_C_USB_BOX] = {
 		.name          = "Reddo DVB-C USB TV Box",
 		.name          = "Reddo DVB-C USB TV Box",
 		.tuner_type    = TUNER_ABSENT,
 		.tuner_type    = TUNER_ABSENT,
+		.tuner_gpio    = reddo_dvb_c_usb_box,
 		.has_dvb       = 1,
 		.has_dvb       = 1,
-		.dvb_gpio      = reddo_dvb_c_usb_box,
 	},
 	},
 };
 };
 const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards);
 const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards);

+ 1 - 0
drivers/media/video/mx1_camera.c

@@ -28,6 +28,7 @@
 #include <linux/moduleparam.h>
 #include <linux/moduleparam.h>
 #include <linux/mutex.h>
 #include <linux/mutex.h>
 #include <linux/platform_device.h>
 #include <linux/platform_device.h>
+#include <linux/sched.h>
 #include <linux/time.h>
 #include <linux/time.h>
 #include <linux/version.h>
 #include <linux/version.h>
 #include <linux/videodev2.h>
 #include <linux/videodev2.h>

+ 1 - 0
drivers/media/video/mx3_camera.c

@@ -17,6 +17,7 @@
 #include <linux/clk.h>
 #include <linux/clk.h>
 #include <linux/vmalloc.h>
 #include <linux/vmalloc.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>
+#include <linux/sched.h>
 
 
 #include <media/v4l2-common.h>
 #include <media/v4l2-common.h>
 #include <media/v4l2-dev.h>
 #include <media/v4l2-dev.h>

+ 5 - 2
drivers/media/video/sh_mobile_ceu_camera.c

@@ -31,6 +31,7 @@
 #include <linux/platform_device.h>
 #include <linux/platform_device.h>
 #include <linux/videodev2.h>
 #include <linux/videodev2.h>
 #include <linux/pm_runtime.h>
 #include <linux/pm_runtime.h>
+#include <linux/sched.h>
 
 
 #include <media/v4l2-common.h>
 #include <media/v4l2-common.h>
 #include <media/v4l2-dev.h>
 #include <media/v4l2-dev.h>
@@ -1723,11 +1724,12 @@ static int __devinit sh_mobile_ceu_probe(struct platform_device *pdev)
 
 
 	err = soc_camera_host_register(&pcdev->ici);
 	err = soc_camera_host_register(&pcdev->ici);
 	if (err)
 	if (err)
-		goto exit_free_irq;
+		goto exit_free_clk;
 
 
 	return 0;
 	return 0;
 
 
-exit_free_irq:
+exit_free_clk:
+	pm_runtime_disable(&pdev->dev);
 	free_irq(pcdev->irq, pcdev);
 	free_irq(pcdev->irq, pcdev);
 exit_release_mem:
 exit_release_mem:
 	if (platform_get_resource(pdev, IORESOURCE_MEM, 1))
 	if (platform_get_resource(pdev, IORESOURCE_MEM, 1))
@@ -1747,6 +1749,7 @@ static int __devexit sh_mobile_ceu_remove(struct platform_device *pdev)
 					struct sh_mobile_ceu_dev, ici);
 					struct sh_mobile_ceu_dev, ici);
 
 
 	soc_camera_host_unregister(soc_host);
 	soc_camera_host_unregister(soc_host);
+	pm_runtime_disable(&pdev->dev);
 	free_irq(pcdev->irq, pcdev);
 	free_irq(pcdev->irq, pcdev);
 	if (platform_get_resource(pdev, IORESOURCE_MEM, 1))
 	if (platform_get_resource(pdev, IORESOURCE_MEM, 1))
 		dma_release_declared_memory(&pdev->dev);
 		dma_release_declared_memory(&pdev->dev);

+ 12 - 5
drivers/media/video/soc_camera.c

@@ -1097,6 +1097,13 @@ static int default_s_crop(struct soc_camera_device *icd, struct v4l2_crop *a)
 	return v4l2_subdev_call(sd, video, s_crop, a);
 	return v4l2_subdev_call(sd, video, s_crop, a);
 }
 }
 
 
+static void soc_camera_device_init(struct device *dev, void *pdata)
+{
+	dev->platform_data	= pdata;
+	dev->bus		= &soc_camera_bus_type;
+	dev->release		= dummy_release;
+}
+
 int soc_camera_host_register(struct soc_camera_host *ici)
 int soc_camera_host_register(struct soc_camera_host *ici)
 {
 {
 	struct soc_camera_host *ix;
 	struct soc_camera_host *ix;
@@ -1158,6 +1165,7 @@ void soc_camera_host_unregister(struct soc_camera_host *ici)
 
 
 	list_for_each_entry(icd, &devices, list) {
 	list_for_each_entry(icd, &devices, list) {
 		if (icd->iface == ici->nr) {
 		if (icd->iface == ici->nr) {
+			void *pdata = icd->dev.platform_data;
 			/* The bus->remove will be called */
 			/* The bus->remove will be called */
 			device_unregister(&icd->dev);
 			device_unregister(&icd->dev);
 			/*
 			/*
@@ -1169,6 +1177,7 @@ void soc_camera_host_unregister(struct soc_camera_host *ici)
 			 * device private data.
 			 * device private data.
 			 */
 			 */
 			memset(&icd->dev, 0, sizeof(icd->dev));
 			memset(&icd->dev, 0, sizeof(icd->dev));
+			soc_camera_device_init(&icd->dev, pdata);
 		}
 		}
 	}
 	}
 
 
@@ -1200,10 +1209,7 @@ static int soc_camera_device_register(struct soc_camera_device *icd)
 		 * man, stay reasonable... */
 		 * man, stay reasonable... */
 		return -ENOMEM;
 		return -ENOMEM;
 
 
-	icd->devnum = num;
-	icd->dev.bus = &soc_camera_bus_type;
-
-	icd->dev.release	= dummy_release;
+	icd->devnum		= num;
 	icd->use_count		= 0;
 	icd->use_count		= 0;
 	icd->host_priv		= NULL;
 	icd->host_priv		= NULL;
 	mutex_init(&icd->video_lock);
 	mutex_init(&icd->video_lock);
@@ -1311,12 +1317,13 @@ static int __devinit soc_camera_pdrv_probe(struct platform_device *pdev)
 	icd->iface = icl->bus_id;
 	icd->iface = icl->bus_id;
 	icd->pdev = &pdev->dev;
 	icd->pdev = &pdev->dev;
 	platform_set_drvdata(pdev, icd);
 	platform_set_drvdata(pdev, icd);
-	icd->dev.platform_data = icl;
 
 
 	ret = soc_camera_device_register(icd);
 	ret = soc_camera_device_register(icd);
 	if (ret < 0)
 	if (ret < 0)
 		goto escdevreg;
 		goto escdevreg;
 
 
+	soc_camera_device_init(&icd->dev, icl);
+
 	icd->user_width		= DEFAULT_WIDTH;
 	icd->user_width		= DEFAULT_WIDTH;
 	icd->user_height	= DEFAULT_HEIGHT;
 	icd->user_height	= DEFAULT_HEIGHT;
 
 

+ 1 - 0
drivers/media/video/videobuf-dma-contig.c

@@ -19,6 +19,7 @@
 #include <linux/mm.h>
 #include <linux/mm.h>
 #include <linux/pagemap.h>
 #include <linux/pagemap.h>
 #include <linux/dma-mapping.h>
 #include <linux/dma-mapping.h>
+#include <linux/sched.h>
 #include <media/videobuf-dma-contig.h>
 #include <media/videobuf-dma-contig.h>
 
 
 struct videobuf_dma_contig_memory {
 struct videobuf_dma_contig_memory {

+ 2 - 2
drivers/staging/go7007/s2250-board.c

@@ -261,7 +261,7 @@ static int read_reg_fp(struct i2c_client *client, u16 addr, u16 *val)
 
 
 	memset(buf, 0xcd, 6);
 	memset(buf, 0xcd, 6);
 	usb = go->hpi_context;
 	usb = go->hpi_context;
-	if (down_interruptible(&usb->i2c_lock) != 0) {
+	if (mutex_lock_interruptible(&usb->i2c_lock) != 0) {
 		printk(KERN_INFO "i2c lock failed\n");
 		printk(KERN_INFO "i2c lock failed\n");
 		kfree(buf);
 		kfree(buf);
 		return -EINTR;
 		return -EINTR;
@@ -270,7 +270,7 @@ static int read_reg_fp(struct i2c_client *client, u16 addr, u16 *val)
 		kfree(buf);
 		kfree(buf);
 		return -EFAULT;
 		return -EFAULT;
 	}
 	}
-	up(&usb->i2c_lock);
+	mutex_unlock(&usb->i2c_lock);
 
 
 	*val = (buf[0] << 8) | buf[1];
 	*val = (buf[0] << 8) | buf[1];
 	kfree(buf);
 	kfree(buf);

+ 24 - 0
drivers/staging/go7007/s2250-loader.h

@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2005-2006 Micronas USA Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License (Version 2) as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
+ */
+
+#ifndef _S2250_LOADER_H_
+#define _S2250_LOADER_H_
+
+extern int s2250loader_init(void);
+extern void s2250loader_cleanup(void);
+
+#endif