Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 38207
b: refs/heads/master
c: eee3a88
h: refs/heads/master
i:
  38205: 02249f6
  38203: 614c170
  38199: e6ec130
  38191: 254b29f
  38175: 556964c
  38143: 9a2a82d
v: v3
  • Loading branch information
Russell King authored and Russell King committed Oct 1, 2006
1 parent 753233e commit 31a7bb4
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 35 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a8244b564ccc46dabf2367008aecf2b380a9be8d
refs/heads/master: eee3a883cebefca6c450c3c1c18a996e23001c2c
90 changes: 56 additions & 34 deletions trunk/drivers/serial/serial_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,59 @@ struct serial_quirk {
unsigned int manfid;
unsigned int prodid;
int multi; /* 1 = multifunction, > 1 = # ports */
int (*post)(struct pcmcia_device *);
};

struct serial_info {
struct pcmcia_device *p_dev;
int ndev;
int multi;
int slave;
int manfid;
int prodid;
int c950ctrl;
dev_node_t node[4];
int line[4];
const struct serial_quirk *quirk;
};

struct serial_cfg_mem {
tuple_t tuple;
cisparse_t parse;
u_char buf[256];
};

static int quirk_post_ibm(struct pcmcia_device *link)
{
conf_reg_t reg = { 0, CS_READ, 0x800, 0 };
int last_ret, last_fn;

last_ret = pcmcia_access_configuration_register(link, &reg);
if (last_ret) {
last_fn = AccessConfigurationRegister;
goto cs_failed;
}
reg.Action = CS_WRITE;
reg.Value = reg.Value | 1;
last_ret = pcmcia_access_configuration_register(link, &reg);
if (last_ret) {
last_fn = AccessConfigurationRegister;
goto cs_failed;
}
return 0;

cs_failed:
cs_error(link, last_fn, last_ret);
return -ENODEV;
}

static const struct serial_quirk quirks[] = {
{
.manfid = MANFID_IBM,
.prodid = ~0,
.multi = -1,
.post = quirk_post_ibm,
}, {
.manfid = MANFID_OMEGA,
.prodid = PRODID_OMEGA_QSP_100,
.multi = 4,
Expand Down Expand Up @@ -118,25 +167,6 @@ static const struct serial_quirk quirks[] = {
}
};

struct serial_info {
struct pcmcia_device *p_dev;
int ndev;
int multi;
int slave;
int manfid;
int prodid;
int c950ctrl;
dev_node_t node[4];
int line[4];
const struct serial_quirk *quirk;
};

struct serial_cfg_mem {
tuple_t tuple;
cisparse_t parse;
u_char buf[256];
};


static int serial_config(struct pcmcia_device * link);

Expand Down Expand Up @@ -687,21 +717,13 @@ static int serial_config(struct pcmcia_device * link)
if (info->ndev == 0)
goto failed;

if (info->manfid == MANFID_IBM) {
conf_reg_t reg = { 0, CS_READ, 0x800, 0 };
last_ret = pcmcia_access_configuration_register(link, &reg);
if (last_ret) {
last_fn = AccessConfigurationRegister;
goto cs_failed;
}
reg.Action = CS_WRITE;
reg.Value = reg.Value | 1;
last_ret = pcmcia_access_configuration_register(link, &reg);
if (last_ret) {
last_fn = AccessConfigurationRegister;
goto cs_failed;
}
}
/*
* Apply any post-init quirk. FIXME: This should really happen
* before we register the port, since it might already be in use.
*/
if (info->quirk && info->quirk->post)
if (info->quirk->post(link))
goto failed;

link->dev_node = &info->node[0];
kfree(cfg_mem);
Expand Down

0 comments on commit 31a7bb4

Please sign in to comment.