aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/fec.c125
-rw-r--r--drivers/net/ibm_newemac/core.c33
-rw-r--r--drivers/net/ibm_newemac/emac.h19
-rw-r--r--drivers/net/ibm_newemac/phy.c7
-rw-r--r--drivers/net/pcmcia/smc91c92_cs.c2
-rw-r--r--drivers/net/sungem.c3
-rw-r--r--drivers/net/wireless/hostap/hostap_cs.c2
-rw-r--r--drivers/net/wireless/orinoco/orinoco_cs.c5
8 files changed, 144 insertions, 52 deletions
diff --git a/drivers/net/fec.c b/drivers/net/fec.c
index 5b631fe74738..e8266ccf818a 100644
--- a/drivers/net/fec.c
+++ b/drivers/net/fec.c
@@ -44,6 +44,10 @@
44#include <linux/platform_device.h> 44#include <linux/platform_device.h>
45#include <linux/phy.h> 45#include <linux/phy.h>
46#include <linux/fec.h> 46#include <linux/fec.h>
47#include <linux/of.h>
48#include <linux/of_device.h>
49#include <linux/of_gpio.h>
50#include <linux/of_net.h>
47 51
48#include <asm/cacheflush.h> 52#include <asm/cacheflush.h>
49 53
@@ -66,17 +70,42 @@
66#define FEC_QUIRK_ENET_MAC (1 << 0) 70#define FEC_QUIRK_ENET_MAC (1 << 0)
67/* Controller needs driver to swap frame */ 71/* Controller needs driver to swap frame */
68#define FEC_QUIRK_SWAP_FRAME (1 << 1) 72#define FEC_QUIRK_SWAP_FRAME (1 << 1)
73/* Controller uses gasket */
74#define FEC_QUIRK_USE_GASKET (1 << 2)
69 75
70static struct platform_device_id fec_devtype[] = { 76static struct platform_device_id fec_devtype[] = {
71 { 77 {
78 /* keep it for coldfire */
72 .name = DRIVER_NAME, 79 .name = DRIVER_NAME,
73 .driver_data = 0, 80 .driver_data = 0,
74 }, { 81 }, {
82 .name = "imx25-fec",
83 .driver_data = FEC_QUIRK_USE_GASKET,
84 }, {
85 .name = "imx27-fec",
86 .driver_data = 0,
87 }, {
75 .name = "imx28-fec", 88 .name = "imx28-fec",
76 .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_SWAP_FRAME, 89 .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_SWAP_FRAME,
77 }, 90 }, {
78 { } 91 /* sentinel */
92 }
79}; 93};
94MODULE_DEVICE_TABLE(platform, fec_devtype);
95
96enum imx_fec_type {
97 IMX25_FEC = 1, /* runs on i.mx25/50/53 */
98 IMX27_FEC, /* runs on i.mx27/35/51 */
99 IMX28_FEC,
100};
101
102static const struct of_device_id fec_dt_ids[] = {
103 { .compatible = "fsl,imx25-fec", .data = &fec_devtype[IMX25_FEC], },
104 { .compatible = "fsl,imx27-fec", .data = &fec_devtype[IMX27_FEC], },
105 { .compatible = "fsl,imx28-fec", .data = &fec_devtype[IMX28_FEC], },
106 { /* sentinel */ }
107};
108MODULE_DEVICE_TABLE(of, fec_dt_ids);
80 109
81static unsigned char macaddr[ETH_ALEN]; 110static unsigned char macaddr[ETH_ALEN];
82module_param_array(macaddr, byte, NULL, 0); 111module_param_array(macaddr, byte, NULL, 0);
@@ -427,7 +456,7 @@ fec_restart(struct net_device *ndev, int duplex)
427 456
428 } else { 457 } else {
429#ifdef FEC_MIIGSK_ENR 458#ifdef FEC_MIIGSK_ENR
430 if (fep->phy_interface == PHY_INTERFACE_MODE_RMII) { 459 if (id_entry->driver_data & FEC_QUIRK_USE_GASKET) {
431 /* disable the gasket and wait */ 460 /* disable the gasket and wait */
432 writel(0, fep->hwp + FEC_MIIGSK_ENR); 461 writel(0, fep->hwp + FEC_MIIGSK_ENR);
433 while (readl(fep->hwp + FEC_MIIGSK_ENR) & 4) 462 while (readl(fep->hwp + FEC_MIIGSK_ENR) & 4)
@@ -436,8 +465,11 @@ fec_restart(struct net_device *ndev, int duplex)
436 /* 465 /*
437 * configure the gasket: 466 * configure the gasket:
438 * RMII, 50 MHz, no loopback, no echo 467 * RMII, 50 MHz, no loopback, no echo
468 * MII, 25 MHz, no loopback, no echo
439 */ 469 */
440 writel(1, fep->hwp + FEC_MIIGSK_CFGR); 470 writel((fep->phy_interface == PHY_INTERFACE_MODE_RMII) ?
471 1 : 0, fep->hwp + FEC_MIIGSK_CFGR);
472
441 473
442 /* re-enable the gasket */ 474 /* re-enable the gasket */
443 writel(2, fep->hwp + FEC_MIIGSK_ENR); 475 writel(2, fep->hwp + FEC_MIIGSK_ENR);
@@ -734,8 +766,22 @@ static void __inline__ fec_get_mac(struct net_device *ndev)
734 */ 766 */
735 iap = macaddr; 767 iap = macaddr;
736 768
769#ifdef CONFIG_OF
737 /* 770 /*
738 * 2) from flash or fuse (via platform data) 771 * 2) from device tree data
772 */
773 if (!is_valid_ether_addr(iap)) {
774 struct device_node *np = fep->pdev->dev.of_node;
775 if (np) {
776 const char *mac = of_get_mac_address(np);
777 if (mac)
778 iap = (unsigned char *) mac;
779 }
780 }
781#endif
782
783 /*
784 * 3) from flash or fuse (via platform data)
739 */ 785 */
740 if (!is_valid_ether_addr(iap)) { 786 if (!is_valid_ether_addr(iap)) {
741#ifdef CONFIG_M5272 787#ifdef CONFIG_M5272
@@ -748,7 +794,7 @@ static void __inline__ fec_get_mac(struct net_device *ndev)
748 } 794 }
749 795
750 /* 796 /*
751 * 3) FEC mac registers set by bootloader 797 * 4) FEC mac registers set by bootloader
752 */ 798 */
753 if (!is_valid_ether_addr(iap)) { 799 if (!is_valid_ether_addr(iap)) {
754 *((unsigned long *) &tmpaddr[0]) = 800 *((unsigned long *) &tmpaddr[0]) =
@@ -1354,6 +1400,52 @@ static int fec_enet_init(struct net_device *ndev)
1354 return 0; 1400 return 0;
1355} 1401}
1356 1402
1403#ifdef CONFIG_OF
1404static int __devinit fec_get_phy_mode_dt(struct platform_device *pdev)
1405{
1406 struct device_node *np = pdev->dev.of_node;
1407
1408 if (np)
1409 return of_get_phy_mode(np);
1410
1411 return -ENODEV;
1412}
1413
1414static int __devinit fec_reset_phy(struct platform_device *pdev)
1415{
1416 int err, phy_reset;
1417 struct device_node *np = pdev->dev.of_node;
1418
1419 if (!np)
1420 return -ENODEV;
1421
1422 phy_reset = of_get_named_gpio(np, "phy-reset-gpios", 0);
1423 err = gpio_request_one(phy_reset, GPIOF_OUT_INIT_LOW, "phy-reset");
1424 if (err) {
1425 pr_warn("FEC: failed to get gpio phy-reset: %d\n", err);
1426 return err;
1427 }
1428 msleep(1);
1429 gpio_set_value(phy_reset, 1);
1430
1431 return 0;
1432}
1433#else /* CONFIG_OF */
1434static inline int fec_get_phy_mode_dt(struct platform_device *pdev)
1435{
1436 return -ENODEV;
1437}
1438
1439static inline int fec_reset_phy(struct platform_device *pdev)
1440{
1441 /*
1442 * In case of platform probe, the reset has been done
1443 * by machine code.
1444 */
1445 return 0;
1446}
1447#endif /* CONFIG_OF */
1448
1357static int __devinit 1449static int __devinit
1358fec_probe(struct platform_device *pdev) 1450fec_probe(struct platform_device *pdev)
1359{ 1451{
@@ -1362,6 +1454,11 @@ fec_probe(struct platform_device *pdev)
1362 struct net_device *ndev; 1454 struct net_device *ndev;
1363 int i, irq, ret = 0; 1455 int i, irq, ret = 0;
1364 struct resource *r; 1456 struct resource *r;
1457 const struct of_device_id *of_id;
1458
1459 of_id = of_match_device(fec_dt_ids, &pdev->dev);
1460 if (of_id)
1461 pdev->id_entry = of_id->data;
1365 1462
1366 r = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1463 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1367 if (!r) 1464 if (!r)
@@ -1393,9 +1490,18 @@ fec_probe(struct platform_device *pdev)
1393 1490
1394 platform_set_drvdata(pdev, ndev); 1491 platform_set_drvdata(pdev, ndev);
1395 1492
1396 pdata = pdev->dev.platform_data; 1493 ret = fec_get_phy_mode_dt(pdev);
1397 if (pdata) 1494 if (ret < 0) {
1398 fep->phy_interface = pdata->phy; 1495 pdata = pdev->dev.platform_data;
1496 if (pdata)
1497 fep->phy_interface = pdata->phy;
1498 else
1499 fep->phy_interface = PHY_INTERFACE_MODE_MII;
1500 } else {
1501 fep->phy_interface = ret;
1502 }
1503
1504 fec_reset_phy(pdev);
1399 1505
1400 /* This device has up to three irqs on some platforms */ 1506 /* This device has up to three irqs on some platforms */
1401 for (i = 0; i < 3; i++) { 1507 for (i = 0; i < 3; i++) {
@@ -1530,6 +1636,7 @@ static struct platform_driver fec_driver = {
1530#ifdef CONFIG_PM 1636#ifdef CONFIG_PM
1531 .pm = &fec_pm_ops, 1637 .pm = &fec_pm_ops,
1532#endif 1638#endif
1639 .of_match_table = fec_dt_ids,
1533 }, 1640 },
1534 .id_table = fec_devtype, 1641 .id_table = fec_devtype,
1535 .probe = fec_probe, 1642 .probe = fec_probe,
diff --git a/drivers/net/ibm_newemac/core.c b/drivers/net/ibm_newemac/core.c
index 725399ea0690..70cb7d8a3b53 100644
--- a/drivers/net/ibm_newemac/core.c
+++ b/drivers/net/ibm_newemac/core.c
@@ -39,6 +39,7 @@
39#include <linux/bitops.h> 39#include <linux/bitops.h>
40#include <linux/workqueue.h> 40#include <linux/workqueue.h>
41#include <linux/of.h> 41#include <linux/of.h>
42#include <linux/of_net.h>
42#include <linux/slab.h> 43#include <linux/slab.h>
43 44
44#include <asm/processor.h> 45#include <asm/processor.h>
@@ -2506,18 +2507,6 @@ static int __devinit emac_init_config(struct emac_instance *dev)
2506{ 2507{
2507 struct device_node *np = dev->ofdev->dev.of_node; 2508 struct device_node *np = dev->ofdev->dev.of_node;
2508 const void *p; 2509 const void *p;
2509 unsigned int plen;
2510 const char *pm, *phy_modes[] = {
2511 [PHY_MODE_NA] = "",
2512 [PHY_MODE_MII] = "mii",
2513 [PHY_MODE_RMII] = "rmii",
2514 [PHY_MODE_SMII] = "smii",
2515 [PHY_MODE_RGMII] = "rgmii",
2516 [PHY_MODE_TBI] = "tbi",
2517 [PHY_MODE_GMII] = "gmii",
2518 [PHY_MODE_RTBI] = "rtbi",
2519 [PHY_MODE_SGMII] = "sgmii",
2520 };
2521 2510
2522 /* Read config from device-tree */ 2511 /* Read config from device-tree */
2523 if (emac_read_uint_prop(np, "mal-device", &dev->mal_ph, 1)) 2512 if (emac_read_uint_prop(np, "mal-device", &dev->mal_ph, 1))
@@ -2566,23 +2555,9 @@ static int __devinit emac_init_config(struct emac_instance *dev)
2566 dev->mal_burst_size = 256; 2555 dev->mal_burst_size = 256;
2567 2556
2568 /* PHY mode needs some decoding */ 2557 /* PHY mode needs some decoding */
2569 dev->phy_mode = PHY_MODE_NA; 2558 dev->phy_mode = of_get_phy_mode(np);
2570 pm = of_get_property(np, "phy-mode", &plen); 2559 if (dev->phy_mode < 0)
2571 if (pm != NULL) { 2560 dev->phy_mode = PHY_MODE_NA;
2572 int i;
2573 for (i = 0; i < ARRAY_SIZE(phy_modes); i++)
2574 if (!strcasecmp(pm, phy_modes[i])) {
2575 dev->phy_mode = i;
2576 break;
2577 }
2578 }
2579
2580 /* Backward compat with non-final DT */
2581 if (dev->phy_mode == PHY_MODE_NA && pm != NULL && plen == 4) {
2582 u32 nmode = *(const u32 *)pm;
2583 if (nmode > PHY_MODE_NA && nmode <= PHY_MODE_SGMII)
2584 dev->phy_mode = nmode;
2585 }
2586 2561
2587 /* Check EMAC version */ 2562 /* Check EMAC version */
2588 if (of_device_is_compatible(np, "ibm,emac4sync")) { 2563 if (of_device_is_compatible(np, "ibm,emac4sync")) {
diff --git a/drivers/net/ibm_newemac/emac.h b/drivers/net/ibm_newemac/emac.h
index 8a61b597a169..1568278d759a 100644
--- a/drivers/net/ibm_newemac/emac.h
+++ b/drivers/net/ibm_newemac/emac.h
@@ -26,6 +26,7 @@
26#define __IBM_NEWEMAC_H 26#define __IBM_NEWEMAC_H
27 27
28#include <linux/types.h> 28#include <linux/types.h>
29#include <linux/phy.h>
29 30
30/* EMAC registers Write Access rules */ 31/* EMAC registers Write Access rules */
31struct emac_regs { 32struct emac_regs {
@@ -106,15 +107,15 @@ struct emac_regs {
106/* 107/*
107 * PHY mode settings (EMAC <-> ZMII/RGMII bridge <-> PHY) 108 * PHY mode settings (EMAC <-> ZMII/RGMII bridge <-> PHY)
108 */ 109 */
109#define PHY_MODE_NA 0 110#define PHY_MODE_NA PHY_INTERFACE_MODE_NA
110#define PHY_MODE_MII 1 111#define PHY_MODE_MII PHY_INTERFACE_MODE_MII
111#define PHY_MODE_RMII 2 112#define PHY_MODE_RMII PHY_INTERFACE_MODE_RMII
112#define PHY_MODE_SMII 3 113#define PHY_MODE_SMII PHY_INTERFACE_MODE_SMII
113#define PHY_MODE_RGMII 4 114#define PHY_MODE_RGMII PHY_INTERFACE_MODE_RGMII
114#define PHY_MODE_TBI 5 115#define PHY_MODE_TBI PHY_INTERFACE_MODE_TBI
115#define PHY_MODE_GMII 6 116#define PHY_MODE_GMII PHY_INTERFACE_MODE_GMII
116#define PHY_MODE_RTBI 7 117#define PHY_MODE_RTBI PHY_INTERFACE_MODE_RTBI
117#define PHY_MODE_SGMII 8 118#define PHY_MODE_SGMII PHY_INTERFACE_MODE_SGMII
118 119
119/* EMACx_MR0 */ 120/* EMACx_MR0 */
120#define EMAC_MR0_RXI 0x80000000 121#define EMAC_MR0_RXI 0x80000000
diff --git a/drivers/net/ibm_newemac/phy.c b/drivers/net/ibm_newemac/phy.c
index ac9d964e59ec..ab4e5969fe65 100644
--- a/drivers/net/ibm_newemac/phy.c
+++ b/drivers/net/ibm_newemac/phy.c
@@ -28,12 +28,15 @@
28#include "emac.h" 28#include "emac.h"
29#include "phy.h" 29#include "phy.h"
30 30
31static inline int phy_read(struct mii_phy *phy, int reg) 31#define phy_read _phy_read
32#define phy_write _phy_write
33
34static inline int _phy_read(struct mii_phy *phy, int reg)
32{ 35{
33 return phy->mdio_read(phy->dev, phy->address, reg); 36 return phy->mdio_read(phy->dev, phy->address, reg);
34} 37}
35 38
36static inline void phy_write(struct mii_phy *phy, int reg, int val) 39static inline void _phy_write(struct mii_phy *phy, int reg, int val)
37{ 40{
38 phy->mdio_write(phy->dev, phy->address, reg, val); 41 phy->mdio_write(phy->dev, phy->address, reg, val);
39} 42}
diff --git a/drivers/net/pcmcia/smc91c92_cs.c b/drivers/net/pcmcia/smc91c92_cs.c
index 1cd9394c3359..cffbc0373fa9 100644
--- a/drivers/net/pcmcia/smc91c92_cs.c
+++ b/drivers/net/pcmcia/smc91c92_cs.c
@@ -809,7 +809,7 @@ static int smc91c92_config(struct pcmcia_device *link)
809 struct net_device *dev = link->priv; 809 struct net_device *dev = link->priv;
810 struct smc_private *smc = netdev_priv(dev); 810 struct smc_private *smc = netdev_priv(dev);
811 char *name; 811 char *name;
812 int i, j, rev; 812 int i, rev, j = 0;
813 unsigned int ioaddr; 813 unsigned int ioaddr;
814 u_long mir; 814 u_long mir;
815 815
diff --git a/drivers/net/sungem.c b/drivers/net/sungem.c
index be745ae8f4e3..ade35dde5b51 100644
--- a/drivers/net/sungem.c
+++ b/drivers/net/sungem.c
@@ -46,14 +46,15 @@
46#include <asm/byteorder.h> 46#include <asm/byteorder.h>
47#include <asm/uaccess.h> 47#include <asm/uaccess.h>
48#include <asm/irq.h> 48#include <asm/irq.h>
49#include <asm/prom.h>
50 49
51#ifdef CONFIG_SPARC 50#ifdef CONFIG_SPARC
52#include <asm/idprom.h> 51#include <asm/idprom.h>
52#include <asm/prom.h>
53#endif 53#endif
54 54
55#ifdef CONFIG_PPC_PMAC 55#ifdef CONFIG_PPC_PMAC
56#include <asm/pci-bridge.h> 56#include <asm/pci-bridge.h>
57#include <asm/prom.h>
57#include <asm/machdep.h> 58#include <asm/machdep.h>
58#include <asm/pmac_feature.h> 59#include <asm/pmac_feature.h>
59#endif 60#endif
diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c
index c052a0d5cbdd..5441ad195119 100644
--- a/drivers/net/wireless/hostap/hostap_cs.c
+++ b/drivers/net/wireless/hostap/hostap_cs.c
@@ -648,6 +648,8 @@ static const struct pcmcia_device_id hostap_cs_ids[] = {
648 0x74c5e40d), 648 0x74c5e40d),
649 PCMCIA_DEVICE_MANF_CARD_PROD_ID1(0x0156, 0x0002, "Intersil", 649 PCMCIA_DEVICE_MANF_CARD_PROD_ID1(0x0156, 0x0002, "Intersil",
650 0x4b801a17), 650 0x4b801a17),
651 PCMCIA_DEVICE_MANF_CARD_PROD_ID3(0x0156, 0x0002, "Version 01.02",
652 0x4b74baa0),
651 PCMCIA_MFC_DEVICE_PROD_ID12(0, "SanDisk", "ConnectPlus", 653 PCMCIA_MFC_DEVICE_PROD_ID12(0, "SanDisk", "ConnectPlus",
652 0x7a954bd9, 0x74be00c6), 654 0x7a954bd9, 0x74be00c6),
653 PCMCIA_DEVICE_PROD_ID123( 655 PCMCIA_DEVICE_PROD_ID123(
diff --git a/drivers/net/wireless/orinoco/orinoco_cs.c b/drivers/net/wireless/orinoco/orinoco_cs.c
index 3f7fc4a0b43d..d7dbc00bcfbe 100644
--- a/drivers/net/wireless/orinoco/orinoco_cs.c
+++ b/drivers/net/wireless/orinoco/orinoco_cs.c
@@ -239,7 +239,6 @@ static int orinoco_cs_resume(struct pcmcia_device *link)
239 239
240static const struct pcmcia_device_id orinoco_cs_ids[] = { 240static const struct pcmcia_device_id orinoco_cs_ids[] = {
241 PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0777), /* 3Com AirConnect PCI 777A */ 241 PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0777), /* 3Com AirConnect PCI 777A */
242 PCMCIA_DEVICE_MANF_CARD(0x0156, 0x0002), /* Lucent Orinoco and old Intersil */
243 PCMCIA_DEVICE_MANF_CARD(0x016b, 0x0001), /* Ericsson WLAN Card C11 */ 242 PCMCIA_DEVICE_MANF_CARD(0x016b, 0x0001), /* Ericsson WLAN Card C11 */
244 PCMCIA_DEVICE_MANF_CARD(0x01eb, 0x080a), /* Nortel Networks eMobility 802.11 Wireless Adapter */ 243 PCMCIA_DEVICE_MANF_CARD(0x01eb, 0x080a), /* Nortel Networks eMobility 802.11 Wireless Adapter */
245 PCMCIA_DEVICE_MANF_CARD(0x0261, 0x0002), /* AirWay 802.11 Adapter (PCMCIA) */ 244 PCMCIA_DEVICE_MANF_CARD(0x0261, 0x0002), /* AirWay 802.11 Adapter (PCMCIA) */
@@ -272,6 +271,7 @@ static const struct pcmcia_device_id orinoco_cs_ids[] = {
272 PCMCIA_DEVICE_PROD_ID12("PROXIM", "LAN PCI CARD HARMONY 80211B", 0xc6536a5e, 0x9f494e26), 271 PCMCIA_DEVICE_PROD_ID12("PROXIM", "LAN PCI CARD HARMONY 80211B", 0xc6536a5e, 0x9f494e26),
273 PCMCIA_DEVICE_PROD_ID12("SAMSUNG", "11Mbps WLAN Card", 0x43d74cb4, 0x579bd91b), 272 PCMCIA_DEVICE_PROD_ID12("SAMSUNG", "11Mbps WLAN Card", 0x43d74cb4, 0x579bd91b),
274 PCMCIA_DEVICE_PROD_ID12("Symbol Technologies", "LA4111 Spectrum24 Wireless LAN PC Card", 0x3f02b4d6, 0x3663cb0e), 273 PCMCIA_DEVICE_PROD_ID12("Symbol Technologies", "LA4111 Spectrum24 Wireless LAN PC Card", 0x3f02b4d6, 0x3663cb0e),
274 PCMCIA_DEVICE_MANF_CARD_PROD_ID3(0x0156, 0x0002, "Version 01.01", 0xd27deb1a), /* Lucent Orinoco */
275#ifdef CONFIG_HERMES_PRISM 275#ifdef CONFIG_HERMES_PRISM
276 /* Only entries that certainly identify Prism chipset */ 276 /* Only entries that certainly identify Prism chipset */
277 PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7100), /* SonicWALL Long Range Wireless Card */ 277 PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7100), /* SonicWALL Long Range Wireless Card */
@@ -321,6 +321,9 @@ static const struct pcmcia_device_id orinoco_cs_ids[] = {
321 PCMCIA_DEVICE_PROD_ID3("ISL37100P", 0x630d52b2), 321 PCMCIA_DEVICE_PROD_ID3("ISL37100P", 0x630d52b2),
322 PCMCIA_DEVICE_PROD_ID3("ISL37101P-10", 0xdd97a26b), 322 PCMCIA_DEVICE_PROD_ID3("ISL37101P-10", 0xdd97a26b),
323 PCMCIA_DEVICE_PROD_ID3("ISL37300P", 0xc9049a39), 323 PCMCIA_DEVICE_PROD_ID3("ISL37300P", 0xc9049a39),
324
325 /* This may be Agere or Intersil Firmware */
326 PCMCIA_DEVICE_MANF_CARD(0x0156, 0x0002),
324#endif 327#endif
325 PCMCIA_DEVICE_NULL, 328 PCMCIA_DEVICE_NULL,
326}; 329};