} parport_info_t;
static void parport_detach(struct pcmcia_device *p_dev);
-static void parport_config(struct pcmcia_device *link);
+static int parport_config(struct pcmcia_device *link);
static void parport_cs_release(struct pcmcia_device *);
/*======================================================================
======================================================================*/
-static int parport_attach(struct pcmcia_device *link)
+static int parport_probe(struct pcmcia_device *link)
{
parport_info_t *info;
link->conf.Attributes = CONF_ENABLE_IRQ;
link->conf.IntType = INT_MEMORY_AND_IO;
- link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
- parport_config(link);
-
- return 0;
+ return parport_config(link);
} /* parport_attach */
/*======================================================================
{
DEBUG(0, "parport_detach(0x%p)\n", link);
- if (link->state & DEV_CONFIG)
- parport_cs_release(link);
+ parport_cs_release(link);
kfree(link->priv);
} /* parport_detach */
#define CS_CHECK(fn, ret) \
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-void parport_config(struct pcmcia_device *link)
+static int parport_config(struct pcmcia_device *link)
{
parport_info_t *info = link->priv;
tuple_t tuple;
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
link->conf.ConfigBase = parse.config.base;
link->conf.Present = parse.config.rmask[0];
-
- /* Configure card */
- link->state |= DEV_CONFIG;
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
tuple.Attributes = 0;
strcpy(info->node.dev_name, p->name);
link->dev_node = &info->node;
- link->state &= ~DEV_CONFIG_PENDING;
- return;
-
+ return 0;
+
cs_failed:
cs_error(link, last_fn, last_ret);
failed:
parport_cs_release(link);
- link->state &= ~DEV_CONFIG_PENDING;
-
+ return -ENODEV;
} /* parport_config */
/*======================================================================
.drv = {
.name = "parport_cs",
},
- .probe = parport_attach,
+ .probe = parport_probe,
.remove = parport_detach,
.id_table = parport_ids,
};