1 | // SPDX-License-Identifier: GPL-2.0-or-later |
2 | /*** -*- linux-c -*- ********************************************************** |
3 | |
4 | Driver for Atmel at76c502 at76c504 and at76c506 wireless cards. |
5 | |
6 | Copyright 2004 Simon Kelley. |
7 | |
8 | |
9 | ******************************************************************************/ |
10 | #include <linux/pci.h> |
11 | #include <linux/kernel.h> |
12 | #include <linux/module.h> |
13 | #include <linux/netdevice.h> |
14 | #include "atmel.h" |
15 | |
16 | MODULE_AUTHOR("Simon Kelley" ); |
17 | MODULE_DESCRIPTION("Support for Atmel at76c50x 802.11 wireless ethernet cards." ); |
18 | MODULE_LICENSE("GPL" ); |
19 | |
20 | static const struct pci_device_id card_ids[] = { |
21 | { 0x1114, 0x0506, PCI_ANY_ID, PCI_ANY_ID }, |
22 | { 0, } |
23 | }; |
24 | |
25 | MODULE_DEVICE_TABLE(pci, card_ids); |
26 | |
27 | static int atmel_pci_probe(struct pci_dev *, const struct pci_device_id *); |
28 | static void atmel_pci_remove(struct pci_dev *); |
29 | |
30 | static struct pci_driver atmel_driver = { |
31 | .name = "atmel" , |
32 | .id_table = card_ids, |
33 | .probe = atmel_pci_probe, |
34 | .remove = atmel_pci_remove, |
35 | }; |
36 | |
37 | |
38 | static int atmel_pci_probe(struct pci_dev *pdev, |
39 | const struct pci_device_id *pent) |
40 | { |
41 | struct net_device *dev; |
42 | |
43 | if (pci_enable_device(dev: pdev)) |
44 | return -ENODEV; |
45 | |
46 | pci_set_master(dev: pdev); |
47 | |
48 | dev = init_atmel_card(pdev->irq, pdev->resource[1].start, |
49 | ATMEL_FW_TYPE_506, |
50 | &pdev->dev, NULL, NULL); |
51 | if (!dev) { |
52 | pci_disable_device(dev: pdev); |
53 | return -ENODEV; |
54 | } |
55 | |
56 | pci_set_drvdata(pdev, data: dev); |
57 | return 0; |
58 | } |
59 | |
60 | static void atmel_pci_remove(struct pci_dev *pdev) |
61 | { |
62 | stop_atmel_card(pci_get_drvdata(pdev)); |
63 | } |
64 | |
65 | module_pci_driver(atmel_driver); |
66 | |