aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pnp/pnpbios/rsparser.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pnp/pnpbios/rsparser.c')
-rw-r--r--drivers/pnp/pnpbios/rsparser.c26
1 files changed, 3 insertions, 23 deletions
diff --git a/drivers/pnp/pnpbios/rsparser.c b/drivers/pnp/pnpbios/rsparser.c
index dbc88412c12e..948a661280d7 100644
--- a/drivers/pnp/pnpbios/rsparser.c
+++ b/drivers/pnp/pnpbios/rsparser.c
@@ -494,32 +494,12 @@ len_err:
494 * Compatible Device IDs 494 * Compatible Device IDs
495 */ 495 */
496 496
497#define HEX(id,a) hex[((id)>>a) & 15]
498#define CHAR(id,a) (0x40 + (((id)>>a) & 31))
499
500void pnpid32_to_pnpid(u32 id, char *str)
501{
502 const char *hex = "0123456789abcdef";
503
504 id = be32_to_cpu(id);
505 str[0] = CHAR(id, 26);
506 str[1] = CHAR(id, 21);
507 str[2] = CHAR(id, 16);
508 str[3] = HEX(id, 12);
509 str[4] = HEX(id, 8);
510 str[5] = HEX(id, 4);
511 str[6] = HEX(id, 0);
512 str[7] = '\0';
513}
514
515#undef CHAR
516#undef HEX
517
518static unsigned char *pnpbios_parse_compatible_ids(unsigned char *p, 497static unsigned char *pnpbios_parse_compatible_ids(unsigned char *p,
519 unsigned char *end, 498 unsigned char *end,
520 struct pnp_dev *dev) 499 struct pnp_dev *dev)
521{ 500{
522 int len, tag; 501 int len, tag;
502 u32 eisa_id;
523 char id[8]; 503 char id[8];
524 struct pnp_id *dev_id; 504 struct pnp_id *dev_id;
525 505
@@ -549,8 +529,8 @@ static unsigned char *pnpbios_parse_compatible_ids(unsigned char *p,
549 case SMALL_TAG_COMPATDEVID: /* compatible ID */ 529 case SMALL_TAG_COMPATDEVID: /* compatible ID */
550 if (len != 4) 530 if (len != 4)
551 goto len_err; 531 goto len_err;
552 pnpid32_to_pnpid(p[1] | p[2] << 8 | p[3] << 16 | p[4] << 532 eisa_id = p[1] | p[2] << 8 | p[3] << 16 | p[4] << 24;
553 24, id); 533 pnp_eisa_id_to_string(eisa_id & PNP_EISA_ID_MASK, id);
554 dev_id = pnp_add_id(dev, id); 534 dev_id = pnp_add_id(dev, id);
555 if (!dev_id) 535 if (!dev_id)
556 return NULL; 536 return NULL;