mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
[PATCH] pcmcia: device and driver matching
The actual matching of pcmcia drivers and pcmcia devices. The original version of this was written by David Woodhouse. Signed-off-by: Dominik Brodowski <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
3ee1393752
commit
1ad275e3e7
4 changed files with 336 additions and 2 deletions
175
include/pcmcia/device_id.h
Normal file
175
include/pcmcia/device_id.h
Normal file
|
|
@ -0,0 +1,175 @@
|
|||
/*
|
||||
* Copyright (2003-2004) Dominik Brodowski <linux@brodo.de>
|
||||
* David Woodhouse
|
||||
*
|
||||
* License: GPL v2
|
||||
*/
|
||||
|
||||
#define PCMCIA_DEVICE_MANF_CARD(manf, card) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \
|
||||
PCMCIA_DEV_ID_MATCH_CARD_ID, \
|
||||
.manf_id = (manf), \
|
||||
.card_id = (card), }
|
||||
|
||||
#define PCMCIA_DEVICE_FUNC_ID(func) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_FUNC_ID, \
|
||||
.func_id = (func), }
|
||||
|
||||
#define PCMCIA_DEVICE_PROD_ID1(v1, vh1) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1, \
|
||||
.prod_id = { (v1), NULL, NULL, NULL }, \
|
||||
.prod_id_hash = { (vh1), 0, 0, 0 }, }
|
||||
|
||||
#define PCMCIA_DEVICE_PROD_ID2(v2, vh2) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID2, \
|
||||
.prod_id = { NULL, (v2), NULL, NULL }, \
|
||||
.prod_id_hash = { 0, (vh2), 0, 0 }, }
|
||||
|
||||
#define PCMCIA_DEVICE_PROD_ID12(v1, v2, vh1, vh2) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID2, \
|
||||
.prod_id = { (v1), (v2), NULL, NULL }, \
|
||||
.prod_id_hash = { (vh1), (vh2), 0, 0 }, }
|
||||
|
||||
#define PCMCIA_DEVICE_PROD_ID13(v1, v3, vh1, vh3) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID3, \
|
||||
.prod_id = { (v1), NULL, (v3), NULL }, \
|
||||
.prod_id_hash = { (vh1), 0, (vh3), 0 }, }
|
||||
|
||||
#define PCMCIA_DEVICE_PROD_ID14(v1, v4, vh1, vh4) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID4, \
|
||||
.prod_id = { (v1), NULL, NULL, (v4) }, \
|
||||
.prod_id_hash = { (vh1), 0, 0, (vh4) }, }
|
||||
|
||||
#define PCMCIA_DEVICE_PROD_ID123(v1, v2, v3, vh1, vh2, vh3) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID2| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID3, \
|
||||
.prod_id = { (v1), (v2), (v3), NULL },\
|
||||
.prod_id_hash = { (vh1), (vh2), (vh3), 0 }, }
|
||||
|
||||
#define PCMCIA_DEVICE_PROD_ID124(v1, v2, v4, vh1, vh2, vh4) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID2| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID4, \
|
||||
.prod_id = { (v1), (v2), NULL, (v4) }, \
|
||||
.prod_id_hash = { (vh1), (vh2), 0, (vh4) }, }
|
||||
|
||||
#define PCMCIA_DEVICE_PROD_ID134(v1, v3, v4, vh1, vh3, vh4) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID3| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID4, \
|
||||
.prod_id = { (v1), NULL, (v3), (v4) }, \
|
||||
.prod_id_hash = { (vh1), 0, (vh3), (vh4) }, }
|
||||
|
||||
#define PCMCIA_DEVICE_PROD_ID1234(v1, v2, v3, v4, vh1, vh2, vh3, vh4) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID2| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID3| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID4, \
|
||||
.prod_id = { (v1), (v2), (v3), (v4) }, \
|
||||
.prod_id_hash = { (vh1), (vh2), (vh3), (vh4) }, }
|
||||
|
||||
|
||||
/* multi-function devices */
|
||||
|
||||
#define PCMCIA_MFC_DEVICE_MANF_CARD(mfc, manf, card) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \
|
||||
PCMCIA_DEV_ID_MATCH_CARD_ID| \
|
||||
PCMCIA_DEV_ID_MATCH_FUNCTION, \
|
||||
.manf_id = (manf), \
|
||||
.card_id = (card), \
|
||||
.function = (mfc), }
|
||||
|
||||
#define PCMCIA_MFC_DEVICE_PROD_ID1(mfc, v1, vh1) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
|
||||
PCMCIA_DEV_ID_MATCH_FUNCTION, \
|
||||
.prod_id = { (v1), NULL, NULL, NULL }, \
|
||||
.prod_id_hash = { (vh1), 0, 0, 0 }, \
|
||||
.function = (mfc), }
|
||||
|
||||
#define PCMCIA_MFC_DEVICE_PROD_ID2(mfc, v2, vh2) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID2| \
|
||||
PCMCIA_DEV_ID_MATCH_FUNCTION, \
|
||||
.prod_id = { NULL, (v2), NULL, NULL }, \
|
||||
.prod_id_hash = { 0, (vh2), 0, 0 }, \
|
||||
.function = (mfc), }
|
||||
|
||||
#define PCMCIA_MFC_DEVICE_PROD_ID12(mfc, v1, v2, vh1, vh2) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID2| \
|
||||
PCMCIA_DEV_ID_MATCH_FUNCTION, \
|
||||
.prod_id = { (v1), (v2), NULL, NULL }, \
|
||||
.prod_id_hash = { (vh1), (vh2), 0, 0 }, \
|
||||
.function = (mfc), }
|
||||
|
||||
#define PCMCIA_MFC_DEVICE_PROD_ID13(mfc, v1, v3, vh1, vh3) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID3| \
|
||||
PCMCIA_DEV_ID_MATCH_FUNCTION, \
|
||||
.prod_id = { (v1), NULL, (v3), NULL }, \
|
||||
.prod_id_hash = { (vh1), 0, (vh3), 0 }, \
|
||||
.function = (mfc), }
|
||||
|
||||
#define PCMCIA_MFC_DEVICE_PROD_ID123(mfc, v1, v2, v3, vh1, vh2, vh3) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID2| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID3| \
|
||||
PCMCIA_DEV_ID_MATCH_FUNCTION, \
|
||||
.prod_id = { (v1), (v2), (v3), NULL },\
|
||||
.prod_id_hash = { (vh1), (vh2), (vh3), 0 }, \
|
||||
.function = (mfc), }
|
||||
|
||||
/* pseudo multi-function devices */
|
||||
|
||||
#define PCMCIA_PFC_DEVICE_MANF_CARD(mfc, manf, card) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \
|
||||
PCMCIA_DEV_ID_MATCH_CARD_ID| \
|
||||
PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
|
||||
.manf_id = (manf), \
|
||||
.card_id = (card), \
|
||||
.device_no = (mfc), }
|
||||
|
||||
#define PCMCIA_PFC_DEVICE_PROD_ID1(mfc, v1, vh1) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
|
||||
PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
|
||||
.prod_id = { (v1), NULL, NULL, NULL }, \
|
||||
.prod_id_hash = { (vh1), 0, 0, 0 }, \
|
||||
.device_no = (mfc), }
|
||||
|
||||
#define PCMCIA_PFC_DEVICE_PROD_ID2(mfc, v2, vh2) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID2| \
|
||||
PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
|
||||
.prod_id = { NULL, (v2), NULL, NULL }, \
|
||||
.prod_id_hash = { 0, (vh2), 0, 0 }, \
|
||||
.device_no = (mfc), }
|
||||
|
||||
#define PCMCIA_PFC_DEVICE_PROD_ID12(mfc, v1, v2, vh1, vh2) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID2| \
|
||||
PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
|
||||
.prod_id = { (v1), (v2), NULL, NULL }, \
|
||||
.prod_id_hash = { (vh1), (vh2), 0, 0 }, \
|
||||
.device_no = (mfc), }
|
||||
|
||||
#define PCMCIA_PFC_DEVICE_PROD_ID13(mfc, v1, v3, vh1, vh3) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID3| \
|
||||
PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
|
||||
.prod_id = { (v1), NULL, (v3), NULL }, \
|
||||
.prod_id_hash = { (vh1), 0, (vh3), 0 }, \
|
||||
.device_no = (mfc), }
|
||||
|
||||
#define PCMCIA_PFC_DEVICE_PROD_ID123(mfc, v1, v2, v3, vh1, vh2, vh3) { \
|
||||
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID2| \
|
||||
PCMCIA_DEV_ID_MATCH_PROD_ID3| \
|
||||
PCMCIA_DEV_ID_MATCH_DEVICE_NO, \
|
||||
.prod_id = { (v1), (v2), (v3), NULL },\
|
||||
.prod_id_hash = { (vh1), (vh2), (vh3), 0 }, \
|
||||
.device_no = (mfc), }
|
||||
|
||||
|
||||
#define PCMCIA_DEVICE_NULL { .match_flags = 0, }
|
||||
|
|
@ -18,6 +18,8 @@
|
|||
|
||||
#include <pcmcia/bulkmem.h>
|
||||
#include <pcmcia/cs_types.h>
|
||||
#include <pcmcia/device_id.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
|
||||
typedef struct tuple_parse_t {
|
||||
tuple_t tuple;
|
||||
|
|
@ -135,6 +137,7 @@ struct pcmcia_driver {
|
|||
dev_link_t *(*attach)(void);
|
||||
void (*detach)(dev_link_t *);
|
||||
struct module *owner;
|
||||
struct pcmcia_device_id *id_table;
|
||||
struct device_driver drv;
|
||||
};
|
||||
|
||||
|
|
@ -173,7 +176,9 @@ struct pcmcia_device {
|
|||
u8 has_manf_id:1;
|
||||
u8 has_card_id:1;
|
||||
u8 has_func_id:1;
|
||||
u8 reserved:5;
|
||||
|
||||
u8 allow_func_id_match:1;
|
||||
u8 reserved:4;
|
||||
|
||||
u8 func_id;
|
||||
u16 manf_id;
|
||||
|
|
|
|||
Loading…
Reference in a new issue