[PATCH 11/18] pcmcia: do not use io_req_t when calling pcmcia_request_io()

Komuro komurojun-mbn at nifty.com
Tue Aug 31 08:05:26 EDT 2010


Hi,

The serial part still does not work.


>does this patch help? If not, could you please enable dynamic debug by
>issuing

I will try it later.


>
>Hey,
>
>does this patch help? If not, could you please enable dynamic debug by
>issuing
>
>$ echo "module pcmcia +p" > /sys/kernel/debug/dynamic_debug/control
>
>Thanks,
>	Dominik
>
>
>From: Dominik Brodowski <linux at dominikbrodowski.net>
>Date: Mon, 30 Aug 2010 08:18:54 +0200
>Subject: [PATCH] pcmcia: fix multifunction card handling in serial_cs.c
>
>We shouldn't overwrite pre-set values, and we should also
>set the port address to the beginning, and not the end of
>the 8-port range.
>
>Reported-by: Komuro <komurojun-mbn at nifty.com>
>Signed-off-by: Dominik Brodowski <linux at dominikbrodowski.net>
>
>diff --git a/drivers/serial/serial_cs.c b/drivers/serial/serial_cs.c
>index 141c695..dd0fa12 100644
>--- a/drivers/serial/serial_cs.c
>+++ b/drivers/serial/serial_cs.c
>@@ -335,8 +335,6 @@ static int serial_probe(struct pcmcia_device *link)
> 	info->p_dev = link;
> 	link->priv = info;
> 
>-	link->resource[0]->flags |= IO_DATA_PATH_WIDTH_8;
>-	link->resource[0]->end = 8;
> 	link->conf.Attributes = CONF_ENABLE_IRQ;
> 	if (do_sound) {
> 		link->conf.Attributes |= CONF_ENABLE_SPKR;
>@@ -466,7 +464,7 @@ static int simple_config(struct pcmcia_device *link)
> 		unsigned int port = 0;
> 		if ((link->resource[1]->end != 0) &&
> 			(resource_size(link->resource[1]) == 8)) {
>-			port = link->resource[1]->end;
>+			port = link->resource[1]->start;
> 			info->slave = 1;
> 		} else if ((info->manfid == MANFID_OSITECH) &&
> 			(resource_size(link->resource[0]) == 0x40)) {
>@@ -479,6 +477,9 @@ static int simple_config(struct pcmcia_device *link)
> 		}
> 	}
> 
>+	link->resource[0]->flags |= IO_DATA_PATH_WIDTH_8;
>+	link->resource[0]->end = 8;
>+
> 	/* First pass: look for a config entry that looks normal.
> 	 * Two tries: without IO aliases, then with aliases */
> 	for (try = 0; try < 4; try++)
>@@ -558,6 +559,7 @@ static int multi_config(struct pcmcia_device *link)
> 	int i, base2 = 0;
> 
> 	/* First, look for a generic full-sized window */
>+	link->resource[0]->flags |= IO_DATA_PATH_WIDTH_8;
> 	link->resource[0]->end = info->multi * 8;
> 	if (pcmcia_loop_config(link, multi_config_check, &base2)) {
> 		/* If that didn't work, look for two windows */




More information about the linux-pcmcia mailing list