diff options
Diffstat (limited to 'drivers/parport')
| -rw-r--r-- | drivers/parport/Kconfig | 13 | ||||
| -rw-r--r-- | drivers/parport/parport_ip32.c | 4 | ||||
| -rw-r--r-- | drivers/parport/parport_mfc3.c | 2 | ||||
| -rw-r--r-- | drivers/parport/parport_pc.c | 28 | ||||
| -rw-r--r-- | drivers/parport/parport_serial.c | 14 | ||||
| -rw-r--r-- | drivers/parport/procfs.c | 58 | ||||
| -rw-r--r-- | drivers/parport/share.c | 3 | 
7 files changed, 61 insertions, 61 deletions
diff --git a/drivers/parport/Kconfig b/drivers/parport/Kconfig index 70694ce38be..44333bd8f90 100644 --- a/drivers/parport/Kconfig +++ b/drivers/parport/Kconfig @@ -5,6 +5,12 @@  # Parport configuration.  # +config ARCH_MIGHT_HAVE_PC_PARPORT +	bool +	help +	  Select this config option from the architecture Kconfig if +	  the architecture might have PC parallel port hardware. +  menuconfig PARPORT  	tristate "Parallel port support"  	depends on HAS_IOMEM @@ -35,11 +41,8 @@ if PARPORT  config PARPORT_PC  	tristate "PC-style hardware" -	depends on (!SPARC64 || PCI) && !SPARC32 && !M32R && !FRV && !S390 && \ -		(!M68K || ISA) && !MN10300 && !AVR32 && !BLACKFIN && \ -		!XTENSA && !CRIS && !H8300 - -	---help--- +	depends on ARCH_MIGHT_HAVE_PC_PARPORT +	help  	  You should say Y here if you have a PC-style parallel port. All  	  IBM PC compatible computers and some Alphas have PC-style  	  parallel ports.  PA-RISC owners should only say Y here if they diff --git a/drivers/parport/parport_ip32.c b/drivers/parport/parport_ip32.c index d4716273651..c864f82bd37 100644 --- a/drivers/parport/parport_ip32.c +++ b/drivers/parport/parport_ip32.c @@ -1331,7 +1331,7 @@ static unsigned int parport_ip32_fwp_wait_interrupt(struct parport *p)  			break;  		/* Initialize mutex used to take interrupts into account */ -		INIT_COMPLETION(priv->irq_complete); +		reinit_completion(&priv->irq_complete);  		/* Enable serviceIntr */  		parport_ip32_frob_econtrol(p, ECR_SERVINTR, 0); @@ -1446,7 +1446,7 @@ static size_t parport_ip32_fifo_write_block_dma(struct parport *p,  	priv->irq_mode = PARPORT_IP32_IRQ_HERE;  	parport_ip32_dma_start(DMA_TO_DEVICE, (void *)buf, len); -	INIT_COMPLETION(priv->irq_complete); +	reinit_completion(&priv->irq_complete);  	parport_ip32_frob_econtrol(p, ECR_DMAEN | ECR_SERVINTR, ECR_DMAEN);  	nfault_timeout = min((unsigned long)physport->cad->timeout, diff --git a/drivers/parport/parport_mfc3.c b/drivers/parport/parport_mfc3.c index 7578d79b368..2f650f68af1 100644 --- a/drivers/parport/parport_mfc3.c +++ b/drivers/parport/parport_mfc3.c @@ -300,7 +300,7 @@ static int __init parport_mfc3_init(void)  		if (!request_mem_region(piabase, sizeof(struct pia), "PIA"))  			continue; -		pp = (struct pia *)ZTWO_VADDR(piabase); +		pp = ZTWO_VADDR(piabase);  		pp->crb = 0;  		pp->pddrb = 255; /* all data pins output */  		pp->crb = PIA_DDR|32|8; diff --git a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c index 903e1285fda..76ee7750bc5 100644 --- a/drivers/parport/parport_pc.c +++ b/drivers/parport/parport_pc.c @@ -2004,6 +2004,7 @@ struct parport *parport_pc_probe_port(unsigned long int base,  	struct resource	*ECR_res = NULL;  	struct resource	*EPP_res = NULL;  	struct platform_device *pdev = NULL; +	int ret;  	if (!dev) {  		/* We need a physical device to attach to, but none was @@ -2014,8 +2015,11 @@ struct parport *parport_pc_probe_port(unsigned long int base,  			return NULL;  		dev = &pdev->dev; -		dev->coherent_dma_mask = DMA_BIT_MASK(24); -		dev->dma_mask = &dev->coherent_dma_mask; +		ret = dma_coerce_mask_and_coherent(dev, DMA_BIT_MASK(24)); +		if (ret) { +			dev_err(dev, "Unable to set coherent dma mask: disabling DMA\n"); +			dma = PARPORT_DMA_NONE; +		}  	}  	ops = kmalloc(sizeof(struct parport_operations), GFP_KERNEL); @@ -2596,8 +2600,6 @@ enum parport_pc_pci_cards {  	syba_2p_epp,  	syba_1p_ecp,  	titan_010l, -	titan_1284p1, -	titan_1284p2,  	avlab_1p,  	avlab_2p,  	oxsemi_952, @@ -2656,8 +2658,6 @@ static struct parport_pc_pci {  	/* syba_2p_epp AP138B */	{ 2, { { 0, 0x078 }, { 0, 0x178 }, } },  	/* syba_1p_ecp W83787 */	{ 1, { { 0, 0x078 }, } },  	/* titan_010l */		{ 1, { { 3, -1 }, } }, -	/* titan_1284p1 */              { 1, { { 0, 1 }, } }, -	/* titan_1284p2 */		{ 2, { { 0, 1 }, { 2, 3 }, } },  	/* avlab_1p		*/	{ 1, { { 0, 1}, } },  	/* avlab_2p		*/	{ 2, { { 0, 1}, { 2, 3 },} },  	/* The Oxford Semi cards are unusual: 954 doesn't support ECP, @@ -2673,8 +2673,8 @@ static struct parport_pc_pci {  	/* netmos_9705 */               { 1, { { 0, -1 }, } },  	/* netmos_9715 */               { 2, { { 0, 1 }, { 2, 3 },} },  	/* netmos_9755 */               { 2, { { 0, 1 }, { 2, 3 },} }, -	/* netmos_9805 */               { 1, { { 0, -1 }, } }, -	/* netmos_9815 */               { 2, { { 0, -1 }, { 2, -1 }, } }, +	/* netmos_9805 */		{ 1, { { 0, 1 }, } }, +	/* netmos_9815 */		{ 2, { { 0, 1 }, { 2, 3 }, } },  	/* netmos_9901 */               { 1, { { 0, -1 }, } },  	/* netmos_9865 */               { 1, { { 0, -1 }, } },  	/* quatech_sppxp100 */		{ 1, { { 0, 1 }, } }, @@ -2718,8 +2718,6 @@ static const struct pci_device_id parport_pc_pci_tbl[] = {  	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, syba_1p_ecp },  	{ PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_010L,  	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, titan_010l }, -	{ 0x9710, 0x9805, 0x1000, 0x0010, 0, 0, titan_1284p1 }, -	{ 0x9710, 0x9815, 0x1000, 0x0020, 0, 0, titan_1284p2 },  	/* PCI_VENDOR_ID_AVLAB/Intek21 has another bunch of cards ...*/  	/* AFAVLAB_TK9902 */  	{ 0x14db, 0x2120, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1p}, @@ -2823,16 +2821,12 @@ static int parport_pc_pci_probe(struct pci_dev *dev,  		if (irq == IRQ_NONE) {  			printk(KERN_DEBUG  	"PCI parallel port detected: %04x:%04x, I/O at %#lx(%#lx)\n", -				parport_pc_pci_tbl[i + last_sio].vendor, -				parport_pc_pci_tbl[i + last_sio].device, -				io_lo, io_hi); +				id->vendor, id->device, io_lo, io_hi);  			irq = PARPORT_IRQ_NONE;  		} else {  			printk(KERN_DEBUG  	"PCI parallel port detected: %04x:%04x, I/O at %#lx(%#lx), IRQ %d\n", -				parport_pc_pci_tbl[i + last_sio].vendor, -				parport_pc_pci_tbl[i + last_sio].device, -				io_lo, io_hi, irq); +				id->vendor, id->device, io_lo, io_hi, irq);  		}  		data->ports[count] =  			parport_pc_probe_port(io_lo, io_hi, irq, @@ -2862,8 +2856,6 @@ static void parport_pc_pci_remove(struct pci_dev *dev)  	struct pci_parport_data *data = pci_get_drvdata(dev);  	int i; -	pci_set_drvdata(dev, NULL); -  	if (data) {  		for (i = data->num - 1; i >= 0; i--)  			parport_pc_unregister_port(data->ports[i]); diff --git a/drivers/parport/parport_serial.c b/drivers/parport/parport_serial.c index 1b8bdb7e9bf..ee932004724 100644 --- a/drivers/parport/parport_serial.c +++ b/drivers/parport/parport_serial.c @@ -62,6 +62,7 @@ enum parport_pc_pci_cards {  	timedia_9079a,  	timedia_9079b,  	timedia_9079c, +	wch_ch353_1s1p,  	wch_ch353_2s1p,  	sunix_2s1p,  }; @@ -148,6 +149,7 @@ static struct parport_pc_pci cards[] = {  	/* timedia_9079a */             { 1, { { 2, 3 }, } },  	/* timedia_9079b */             { 1, { { 2, 3 }, } },  	/* timedia_9079c */             { 1, { { 2, 3 }, } }, +	/* wch_ch353_1s1p*/             { 1, { { 1, -1}, } },  	/* wch_ch353_2s1p*/             { 1, { { 2, -1}, } },  	/* sunix_2s1p */                { 1, { { 3, -1 }, } },  }; @@ -253,6 +255,7 @@ static struct pci_device_id parport_serial_pci_tbl[] = {  	{ 0x1409, 0x7168, 0x1409, 0xd079, 0, 0, timedia_9079c },  	/* WCH CARDS */ +	{ 0x4348, 0x5053, PCI_ANY_ID, PCI_ANY_ID, 0, 0, wch_ch353_1s1p},  	{ 0x4348, 0x7053, 0x4348, 0x3253, 0, 0, wch_ch353_2s1p},  	/* @@ -479,6 +482,12 @@ static struct pciserial_board pci_parport_serial_boards[] = {  		.base_baud	= 921600,  		.uart_offset	= 8,  	}, +	[wch_ch353_1s1p] = { +		.flags          = FL_BASE0|FL_BASE_BARS, +		.num_ports      = 1, +		.base_baud      = 115200, +		.uart_offset    = 8, +	},  	[wch_ch353_2s1p] = {  		.flags          = FL_BASE0|FL_BASE_BARS,  		.num_ports      = 2, @@ -596,13 +605,11 @@ static int parport_serial_pci_probe(struct pci_dev *dev,  	err = pci_enable_device (dev);  	if (err) { -		pci_set_drvdata (dev, NULL);  		kfree (priv);  		return err;  	}  	if (parport_register (dev, id)) { -		pci_set_drvdata (dev, NULL);  		kfree (priv);  		return -ENODEV;  	} @@ -611,7 +618,6 @@ static int parport_serial_pci_probe(struct pci_dev *dev,  		int i;  		for (i = 0; i < priv->num_par; i++)  			parport_pc_unregister_port (priv->port[i]); -		pci_set_drvdata (dev, NULL);  		kfree (priv);  		return -ENODEV;  	} @@ -624,8 +630,6 @@ static void parport_serial_pci_remove(struct pci_dev *dev)  	struct parport_serial_private *priv = pci_get_drvdata (dev);  	int i; -	pci_set_drvdata(dev, NULL); -  	// Serial ports  	if (priv->serial)  		pciserial_remove_ports(priv->serial); diff --git a/drivers/parport/procfs.c b/drivers/parport/procfs.c index 92ed045a5f9..3b470801a04 100644 --- a/drivers/parport/procfs.c +++ b/drivers/parport/procfs.c @@ -31,7 +31,7 @@  #define PARPORT_MIN_SPINTIME_VALUE 1  #define PARPORT_MAX_SPINTIME_VALUE 1000 -static int do_active_device(ctl_table *table, int write, +static int do_active_device(struct ctl_table *table, int write,  		      void __user *result, size_t *lenp, loff_t *ppos)  {  	struct parport *port = (struct parport *)table->extra1; @@ -68,7 +68,7 @@ static int do_active_device(ctl_table *table, int write,  }  #ifdef CONFIG_PARPORT_1284 -static int do_autoprobe(ctl_table *table, int write, +static int do_autoprobe(struct ctl_table *table, int write,  			void __user *result, size_t *lenp, loff_t *ppos)  {  	struct parport_device_info *info = table->extra2; @@ -110,9 +110,9 @@ static int do_autoprobe(ctl_table *table, int write,  }  #endif /* IEEE1284.3 support. */ -static int do_hardware_base_addr (ctl_table *table, int write, -				  void __user *result, -				  size_t *lenp, loff_t *ppos) +static int do_hardware_base_addr(struct ctl_table *table, int write, +				 void __user *result, +				 size_t *lenp, loff_t *ppos)  {  	struct parport *port = (struct parport *)table->extra1;  	char buffer[20]; @@ -138,9 +138,9 @@ static int do_hardware_base_addr (ctl_table *table, int write,  	return copy_to_user(result, buffer, len) ? -EFAULT : 0;  } -static int do_hardware_irq (ctl_table *table, int write, -			    void __user *result, -			    size_t *lenp, loff_t *ppos) +static int do_hardware_irq(struct ctl_table *table, int write, +			   void __user *result, +			   size_t *lenp, loff_t *ppos)  {  	struct parport *port = (struct parport *)table->extra1;  	char buffer[20]; @@ -166,9 +166,9 @@ static int do_hardware_irq (ctl_table *table, int write,  	return copy_to_user(result, buffer, len) ? -EFAULT : 0;  } -static int do_hardware_dma (ctl_table *table, int write, -			    void __user *result, -			    size_t *lenp, loff_t *ppos) +static int do_hardware_dma(struct ctl_table *table, int write, +			   void __user *result, +			   size_t *lenp, loff_t *ppos)  {  	struct parport *port = (struct parport *)table->extra1;  	char buffer[20]; @@ -194,9 +194,9 @@ static int do_hardware_dma (ctl_table *table, int write,  	return copy_to_user(result, buffer, len) ? -EFAULT : 0;  } -static int do_hardware_modes (ctl_table *table, int write, -			      void __user *result, -			      size_t *lenp, loff_t *ppos) +static int do_hardware_modes(struct ctl_table *table, int write, +			     void __user *result, +			     size_t *lenp, loff_t *ppos)  {  	struct parport *port = (struct parport *)table->extra1;  	char buffer[40]; @@ -255,11 +255,11 @@ PARPORT_MAX_SPINTIME_VALUE;  struct parport_sysctl_table {  	struct ctl_table_header *sysctl_header; -	ctl_table vars[12]; -	ctl_table device_dir[2]; -	ctl_table port_dir[2]; -	ctl_table parport_dir[2]; -	ctl_table dev_dir[2]; +	struct ctl_table vars[12]; +	struct ctl_table device_dir[2]; +	struct ctl_table port_dir[2]; +	struct ctl_table parport_dir[2]; +	struct ctl_table dev_dir[2];  };  static const struct parport_sysctl_table parport_sysctl_template = { @@ -369,12 +369,12 @@ static const struct parport_sysctl_table parport_sysctl_template = {  struct parport_device_sysctl_table  {  	struct ctl_table_header *sysctl_header; -	ctl_table vars[2]; -	ctl_table device_dir[2]; -	ctl_table devices_root_dir[2]; -	ctl_table port_dir[2]; -	ctl_table parport_dir[2]; -	ctl_table dev_dir[2]; +	struct ctl_table vars[2]; +	struct ctl_table device_dir[2]; +	struct ctl_table devices_root_dir[2]; +	struct ctl_table port_dir[2]; +	struct ctl_table parport_dir[2]; +	struct ctl_table dev_dir[2];  };  static const struct parport_device_sysctl_table @@ -422,10 +422,10 @@ parport_device_sysctl_template = {  struct parport_default_sysctl_table  {  	struct ctl_table_header *sysctl_header; -	ctl_table vars[3]; -        ctl_table default_dir[2]; -	ctl_table parport_dir[2]; -	ctl_table dev_dir[2]; +	struct ctl_table vars[3]; +	struct ctl_table default_dir[2]; +	struct ctl_table parport_dir[2]; +	struct ctl_table dev_dir[2];  };  static struct parport_default_sysctl_table diff --git a/drivers/parport/share.c b/drivers/parport/share.c index 6a83ee1e917..3fa66244ce3 100644 --- a/drivers/parport/share.c +++ b/drivers/parport/share.c @@ -905,7 +905,8 @@ int parport_claim_or_block(struct pardevice *dev)  		/* If dev->waiting is clear now, an interrupt  		   gave us the port and we would deadlock if we slept.  */  		if (dev->waiting) { -			interruptible_sleep_on (&dev->wait_q); +			wait_event_interruptible(dev->wait_q, +						 !dev->waiting);  			if (signal_pending (current)) {  				return -EINTR;  			}  | 
