Commit 47150372 authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://bk.arm.linux.org.uk/linux-2.6-pcmcia

into home.osdl.org:/home/torvalds/v2.5/linux
parents 22e370f9 5a26baff
...@@ -293,15 +293,17 @@ static void read_cis_cache(struct pcmcia_socket *s, int attr, u_int addr, ...@@ -293,15 +293,17 @@ static void read_cis_cache(struct pcmcia_socket *s, int attr, u_int addr,
#endif #endif
ret = read_cis_mem(s, attr, addr, len, ptr); ret = read_cis_mem(s, attr, addr, len, ptr);
/* Copy data into the cache */ if (ret == 0) {
cis = kmalloc(sizeof(struct cis_cache_entry) + len, GFP_KERNEL); /* Copy data into the cache */
if (cis) { cis = kmalloc(sizeof(struct cis_cache_entry) + len, GFP_KERNEL);
cis->addr = addr; if (cis) {
cis->len = len; cis->addr = addr;
cis->attr = attr; cis->len = len;
memcpy(cis->cache, ptr, len); cis->attr = attr;
list_add(&cis->node, &s->cis_cache); memcpy(cis->cache, ptr, len);
} list_add(&cis->node, &s->cis_cache);
}
}
} }
static void static void
......
...@@ -142,59 +142,61 @@ static void ricoh_zoom_video(struct pcmcia_socket *sock, int onoff) ...@@ -142,59 +142,61 @@ static void ricoh_zoom_video(struct pcmcia_socket *sock, int onoff)
config_writeb(socket, RL5C4XX_MISC_CONTROL, reg); config_writeb(socket, RL5C4XX_MISC_CONTROL, reg);
} }
static void ricoh_set_zv(struct pcmcia_socket *sock) static void ricoh_set_zv(struct yenta_socket *socket)
{ {
struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
if(socket->dev->vendor == PCI_VENDOR_ID_RICOH) if(socket->dev->vendor == PCI_VENDOR_ID_RICOH)
{ {
switch(socket->dev->device) switch(socket->dev->device)
{ {
/* There may be more .. */ /* There may be more .. */
case PCI_DEVICE_ID_RICOH_RL5C478: case PCI_DEVICE_ID_RICOH_RL5C478:
sock->zoom_video = ricoh_zoom_video; socket->socket.zoom_video = ricoh_zoom_video;
break; break;
} }
} }
} }
static int ricoh_init(struct pcmcia_socket *sock) static void ricoh_save_state(struct yenta_socket *socket)
{ {
struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket); rl_misc(socket) = config_readw(socket, RL5C4XX_MISC);
yenta_init(sock); rl_ctl(socket) = config_readw(socket, RL5C4XX_16BIT_CTL);
ricoh_set_zv(sock); rl_io(socket) = config_readw(socket, RL5C4XX_16BIT_IO_0);
rl_mem(socket) = config_readw(socket, RL5C4XX_16BIT_MEM_0);
rl_config(socket) = config_readw(socket, RL5C4XX_CONFIG);
}
static void ricoh_restore_state(struct yenta_socket *socket)
{
config_writew(socket, RL5C4XX_MISC, rl_misc(socket)); config_writew(socket, RL5C4XX_MISC, rl_misc(socket));
config_writew(socket, RL5C4XX_16BIT_CTL, rl_ctl(socket)); config_writew(socket, RL5C4XX_16BIT_CTL, rl_ctl(socket));
config_writew(socket, RL5C4XX_16BIT_IO_0, rl_io(socket)); config_writew(socket, RL5C4XX_16BIT_IO_0, rl_io(socket));
config_writew(socket, RL5C4XX_16BIT_MEM_0, rl_mem(socket)); config_writew(socket, RL5C4XX_16BIT_MEM_0, rl_mem(socket));
config_writew(socket, RL5C4XX_CONFIG, rl_config(socket)); config_writew(socket, RL5C4XX_CONFIG, rl_config(socket));
return 0;
} }
/* /*
* Magic Ricoh initialization code.. Save state at * Magic Ricoh initialization code..
* beginning, re-initialize it after suspend.
*/ */
static int ricoh_override(struct yenta_socket *socket) static int ricoh_override(struct yenta_socket *socket)
{ {
rl_misc(socket) = config_readw(socket, RL5C4XX_MISC); u16 config, ctl;
rl_ctl(socket) = config_readw(socket, RL5C4XX_16BIT_CTL);
rl_io(socket) = config_readw(socket, RL5C4XX_16BIT_IO_0); config = config_readw(socket, RL5C4XX_CONFIG);
rl_mem(socket) = config_readw(socket, RL5C4XX_16BIT_MEM_0);
rl_config(socket) = config_readw(socket, RL5C4XX_CONFIG);
/* Set the default timings, don't trust the original values */ /* Set the default timings, don't trust the original values */
rl_ctl(socket) = RL5C4XX_16CTL_IO_TIMING | RL5C4XX_16CTL_MEM_TIMING; ctl = RL5C4XX_16CTL_IO_TIMING | RL5C4XX_16CTL_MEM_TIMING;
if(socket->dev->device < PCI_DEVICE_ID_RICOH_RL5C475) { if(socket->dev->device < PCI_DEVICE_ID_RICOH_RL5C475) {
rl_ctl(socket) |= RL5C46X_16CTL_LEVEL_1 | RL5C46X_16CTL_LEVEL_2; ctl |= RL5C46X_16CTL_LEVEL_1 | RL5C46X_16CTL_LEVEL_2;
} else { } else {
rl_config(socket) |= RL5C4XX_CONFIG_PREFETCH; config |= RL5C4XX_CONFIG_PREFETCH;
} }
socket->socket.ops->init = ricoh_init; config_writew(socket, RL5C4XX_16BIT_CTL, ctl);
config_writew(socket, RL5C4XX_CONFIG, config);
ricoh_set_zv(socket);
return 0; return 0;
} }
......
...@@ -136,16 +136,34 @@ ...@@ -136,16 +136,34 @@
#ifdef CONFIG_CARDBUS #ifdef CONFIG_CARDBUS
static int ti_intctl(struct yenta_socket *socket) /*
* Texas Instruments CardBus controller overrides.
*/
#define ti_sysctl(socket) ((socket)->private[0])
#define ti_cardctl(socket) ((socket)->private[1])
#define ti_devctl(socket) ((socket)->private[2])
#define ti_diag(socket) ((socket)->private[3])
#define ti_irqmux(socket) ((socket)->private[4])
/*
* These are the TI specific power management handlers.
*/
static void ti_save_state(struct yenta_socket *socket)
{ {
u8 new, reg = exca_readb(socket, I365_INTCTL); ti_sysctl(socket) = config_readl(socket, TI113X_SYSTEM_CONTROL);
ti_irqmux(socket) = config_readl(socket, TI122X_IRQMUX);
ti_cardctl(socket) = config_readb(socket, TI113X_CARD_CONTROL);
ti_devctl(socket) = config_readb(socket, TI113X_DEVICE_CONTROL);
ti_diag(socket) = config_readb(socket, TI1250_DIAGNOSTIC);
}
new = reg & ~I365_INTR_ENA; static void ti_restore_state(struct yenta_socket *socket)
if (socket->cb_irq) {
new |= I365_INTR_ENA; config_writel(socket, TI113X_SYSTEM_CONTROL, ti_sysctl(socket));
if (new != reg) config_writel(socket, TI122X_IRQMUX, ti_irqmux(socket));
exca_writeb(socket, I365_INTCTL, new); config_writeb(socket, TI113X_CARD_CONTROL, ti_cardctl(socket));
return 0; config_writeb(socket, TI113X_DEVICE_CONTROL, ti_devctl(socket));
config_writeb(socket, TI1250_DIAGNOSTIC, ti_diag(socket));
} }
/* /*
...@@ -185,8 +203,8 @@ static void ti1250_zoom_video(struct pcmcia_socket *sock, int onoff) ...@@ -185,8 +203,8 @@ static void ti1250_zoom_video(struct pcmcia_socket *sock, int onoff)
ti_zoom_video(sock, onoff); ti_zoom_video(sock, onoff);
reg = config_readb(socket, 0x84); reg = config_readb(socket, TI1250_MULTIMEDIA_CTL);
reg |= (1<<7); /* ZV bus enable */ reg |= TI1250_MMC_ZVOUTEN; /* ZV bus enable */
if(PCI_FUNC(socket->dev->devfn)==1) if(PCI_FUNC(socket->dev->devfn)==1)
shift = 1; shift = 1;
...@@ -204,12 +222,11 @@ static void ti1250_zoom_video(struct pcmcia_socket *sock, int onoff) ...@@ -204,12 +222,11 @@ static void ti1250_zoom_video(struct pcmcia_socket *sock, int onoff)
reg &= ~(1<<shift); /* Socket zoon video off */ reg &= ~(1<<shift); /* Socket zoon video off */
} }
config_writeb(socket, 0x84, reg); config_writeb(socket, TI1250_MULTIMEDIA_CTL, reg);
} }
static void ti_set_zv(struct pcmcia_socket *sock) static void ti_set_zv(struct yenta_socket *socket)
{ {
struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
if(socket->dev->vendor == PCI_VENDOR_ID_TI) if(socket->dev->vendor == PCI_VENDOR_ID_TI)
{ {
switch(socket->dev->device) switch(socket->dev->device)
...@@ -218,24 +235,16 @@ static void ti_set_zv(struct pcmcia_socket *sock) ...@@ -218,24 +235,16 @@ static void ti_set_zv(struct pcmcia_socket *sock)
case PCI_DEVICE_ID_TI_1220: case PCI_DEVICE_ID_TI_1220:
case PCI_DEVICE_ID_TI_1221: case PCI_DEVICE_ID_TI_1221:
case PCI_DEVICE_ID_TI_1225: case PCI_DEVICE_ID_TI_1225:
sock->zoom_video = ti_zoom_video; socket->socket.zoom_video = ti_zoom_video;
break; break;
case PCI_DEVICE_ID_TI_1250: case PCI_DEVICE_ID_TI_1250:
case PCI_DEVICE_ID_TI_1251A: case PCI_DEVICE_ID_TI_1251A:
case PCI_DEVICE_ID_TI_1251B: case PCI_DEVICE_ID_TI_1251B:
case PCI_DEVICE_ID_TI_1450: case PCI_DEVICE_ID_TI_1450:
sock->zoom_video = ti1250_zoom_video; socket->socket.zoom_video = ti1250_zoom_video;
} }
} }
} }
static int ti_init(struct pcmcia_socket *sock)
{
struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
yenta_init(sock);
ti_set_zv(sock);
ti_intctl(socket);
return 0;
}
/* /*
...@@ -250,6 +259,18 @@ static int ti_init(struct pcmcia_socket *sock) ...@@ -250,6 +259,18 @@ static int ti_init(struct pcmcia_socket *sock)
* This makes us correctly get PCI CSC interrupt * This makes us correctly get PCI CSC interrupt
* events. * events.
*/ */
static int ti_init(struct yenta_socket *socket)
{
u8 new, reg = exca_readb(socket, I365_INTCTL);
new = reg & ~I365_INTR_ENA;
if (socket->cb_irq)
new |= I365_INTR_ENA;
if (new != reg)
exca_writeb(socket, I365_INTCTL, new);
return 0;
}
static int ti_override(struct yenta_socket *socket) static int ti_override(struct yenta_socket *socket)
{ {
u8 new, reg = exca_readb(socket, I365_INTCTL); u8 new, reg = exca_readb(socket, I365_INTCTL);
...@@ -258,6 +279,8 @@ static int ti_override(struct yenta_socket *socket) ...@@ -258,6 +279,8 @@ static int ti_override(struct yenta_socket *socket)
if (new != reg) if (new != reg)
exca_writeb(socket, I365_INTCTL, new); exca_writeb(socket, I365_INTCTL, new);
ti_set_zv(socket);
#if 0 #if 0
/* /*
* If ISA interrupts don't work, then fall back to routing card * If ISA interrupts don't work, then fall back to routing card
...@@ -285,83 +308,85 @@ static int ti_override(struct yenta_socket *socket) ...@@ -285,83 +308,85 @@ static int ti_override(struct yenta_socket *socket)
} }
#endif #endif
socket->socket.ops->init = ti_init;
return 0;
}
#define ti_sysctl(socket) ((socket)->private[0])
#define ti_cardctl(socket) ((socket)->private[1])
#define ti_devctl(socket) ((socket)->private[2])
#define ti_diag(socket) ((socket)->private[3])
#define ti_irqmux(socket) ((socket)->private[4])
static int ti113x_init(struct pcmcia_socket *sock)
{
struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
yenta_init(sock);
ti_set_zv(sock);
config_writel(socket, TI113X_SYSTEM_CONTROL, ti_sysctl(socket));
config_writeb(socket, TI113X_CARD_CONTROL, ti_cardctl(socket));
config_writeb(socket, TI113X_DEVICE_CONTROL, ti_devctl(socket));
ti_intctl(socket);
return 0; return 0;
} }
static int ti113x_override(struct yenta_socket *socket) static int ti113x_override(struct yenta_socket *socket)
{ {
ti_sysctl(socket) = config_readl(socket, TI113X_SYSTEM_CONTROL); u8 cardctl;
ti_cardctl(socket) = config_readb(socket, TI113X_CARD_CONTROL);
ti_devctl(socket) = config_readb(socket, TI113X_DEVICE_CONTROL);
ti_cardctl(socket) &= ~(TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_IREQ | TI113X_CCR_PCI_CSC); cardctl = config_readb(socket, TI113X_CARD_CONTROL);
cardctl &= ~(TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_IREQ | TI113X_CCR_PCI_CSC);
if (socket->cb_irq) if (socket->cb_irq)
ti_cardctl(socket) |= TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_CSC | TI113X_CCR_PCI_IREQ; cardctl |= TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_CSC | TI113X_CCR_PCI_IREQ;
ti_override(socket); config_writeb(socket, TI113X_CARD_CONTROL, cardctl);
socket->socket.ops->init = ti113x_init;
return 0; return ti_override(socket);
} }
static int ti1250_init(struct pcmcia_socket *sock) static int ti12xx_override(struct yenta_socket *socket)
{ {
struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket); u32 val;
ti113x_init(sock);
ti_irqmux(socket) = config_readl(socket, TI122X_IRQMUX); /* make sure that memory burst is active */
#if 0 val = config_readl(socket, TI113X_SYSTEM_CONTROL);
ti_irqmux(socket) = (ti_irqmux(socket) & ~0x0f) | 0x02; /* route INTA */ if (!(val & TI122X_SCR_MRBURSTUP)) {
if (!(ti_sysctl(socket) & TI122X_SCR_INTRTIE)) printk(KERN_INFO "Yenta: Enabling burst memory read transactions\n");
ti_irqmux(socket) |= 0x20; /* route INTB */ val |= TI122X_SCR_MRBURSTUP;
#endif config_writel(socket, TI113X_SYSTEM_CONTROL, val);
}
config_writel(socket, TI122X_IRQMUX, ti_irqmux(socket));
/*
config_writeb(socket, TI1250_DIAGNOSTIC, ti_diag(socket)); * Yenta expects controllers to use CSCINT to route
return 0; * CSC interrupts to PCI rather than INTVAL.
*/
val = config_readb(socket, TI1250_DIAGNOSTIC);
printk(KERN_INFO "Yenta: Using %s to route CSC interrupts to PCI\n",
(val & TI1250_DIAG_PCI_CSC) ? "CSCINT" : "INTVAL");
printk(KERN_INFO "Yenta: Routing CardBus interrupts to %s\n",
(val & TI1250_DIAG_PCI_IREQ) ? "PCI" : "ISA");
return ti_override(socket);
} }
static int ti1250_override(struct yenta_socket *socket) static int ti1250_override(struct yenta_socket *socket)
{ {
ti_diag(socket) = config_readb(socket, TI1250_DIAGNOSTIC); u8 old, diag;
ti_diag(socket) &= ~(TI1250_DIAG_PCI_CSC | TI1250_DIAG_PCI_IREQ); old = config_readb(socket, TI1250_DIAGNOSTIC);
diag = old & ~(TI1250_DIAG_PCI_CSC | TI1250_DIAG_PCI_IREQ);
if (socket->cb_irq) if (socket->cb_irq)
ti_diag(socket) |= TI1250_DIAG_PCI_CSC | TI1250_DIAG_PCI_IREQ; diag |= TI1250_DIAG_PCI_CSC | TI1250_DIAG_PCI_IREQ;
ti113x_override(socket);
socket->socket.ops->init = ti1250_init;
return 0;
}
if (diag != old) {
printk(KERN_INFO "Yenta: adjusting diagnostic: %02x -> %02x\n",
old, diag);
config_writeb(socket, TI1250_DIAGNOSTIC, diag);
}
static int ti12xx_override(struct yenta_socket *socket) #if 0
{ /*
/* make sure that memory burst is active */ * This is highly machine specific, and we should NOT touch
ti_sysctl(socket) = config_readl(socket, TI113X_SYSTEM_CONTROL); * this register - we have no knowledge how the hardware
ti_sysctl(socket) |= TI122X_SCR_MRBURSTUP; * is actually wired.
config_writel(socket, TI113X_SYSTEM_CONTROL, ti_sysctl(socket)); *
* If we're going to do this, we should probably look into
* using the subsystem IDs.
*
* On ThinkPad 380XD, this changes MFUNC0 from the ISA IRQ3
* output (which it is) to IRQ2. We also change MFUNC1
* from ISA IRQ4 to IRQ6.
*/
irqmux = config_readl(socket, TI122X_IRQMUX);
irqmux = (irqmux & ~0x0f) | 0x02; /* route INTA */
if (!(ti_sysctl(socket) & TI122X_SCR_INTRTIE))
irqmux = (irqmux & ~0xf0) | 0x20; /* route INTB */
config_writel(socket, TI122X_IRQMUX, irqmux);
#endif
return ti113x_override(socket); return ti12xx_override(socket);
} }
#endif /* CONFIG_CARDBUS */ #endif /* CONFIG_CARDBUS */
......
...@@ -31,20 +31,7 @@ ...@@ -31,20 +31,7 @@
#ifndef _LINUX_TOPIC_H #ifndef _LINUX_TOPIC_H
#define _LINUX_TOPIC_H #define _LINUX_TOPIC_H
#ifndef PCI_VENDOR_ID_TOSHIBA /* Register definitions for Toshiba ToPIC95/97/100 controllers */
#define PCI_VENDOR_ID_TOSHIBA 0x1179
#endif
#ifndef PCI_DEVICE_ID_TOSHIBA_TOPIC95_A
#define PCI_DEVICE_ID_TOSHIBA_TOPIC95_A 0x0603
#endif
#ifndef PCI_DEVICE_ID_TOSHIBA_TOPIC95_B
#define PCI_DEVICE_ID_TOSHIBA_TOPIC95_B 0x060a
#endif
#ifndef PCI_DEVICE_ID_TOSHIBA_TOPIC97
#define PCI_DEVICE_ID_TOSHIBA_TOPIC97 0x060f
#endif
/* Register definitions for Toshiba ToPIC95 controllers */
#define TOPIC_SOCKET_CONTROL 0x0090 /* 32 bit */ #define TOPIC_SOCKET_CONTROL 0x0090 /* 32 bit */
#define TOPIC_SCR_IRQSEL 0x00000001 #define TOPIC_SCR_IRQSEL 0x00000001
...@@ -93,4 +80,61 @@ ...@@ -93,4 +80,61 @@
#define TOPIC97_RCR_CAUDIO_OFF 0x00000002 #define TOPIC97_RCR_CAUDIO_OFF 0x00000002
#define TOPIC_RCR_CAUDIO_INVERT 0x00000001 #define TOPIC_RCR_CAUDIO_INVERT 0x00000001
#define TOPIC97_MISC1 0x00ad /* 8bit */
#define TOPIC97_MISC1_CLOCKRUN_ENABLE 0x80
#define TOPIC97_MISC1_CLOCKRUN_MODE 0x40
#define TOPIC97_MISC1_DETECT_REQ_ENA 0x10
#define TOPIC97_MISC1_SCK_CLEAR_DIS 0x04
#define TOPIC97_MISC1_R2_LOW_ENABLE 0x10
#define TOPIC97_MISC2 0x00ae /* 8 bit */
#define TOPIC97_MISC2_SPWRCLK_MASK 0x70
#define TOPIC97_MISC2_SPWRMOD 0x08
#define TOPIC97_MISC2_SPWR_ENABLE 0x04
#define TOPIC97_MISC2_ZV_MODE 0x02
#define TOPIC97_MISC2_ZV_ENABLE 0x01
#define TOPIC97_ZOOM_VIDEO_CONTROL 0x009c /* 8 bit */
#define TOPIC97_ZV_CONTROL_ENABLE 0x01
#define TOPIC97_AUDIO_VIDEO_SWITCH 0x003c /* 8 bit */
#define TOPIC97_AVS_AUDIO_CONTROL 0x02
#define TOPIC97_AVS_VIDEO_CONTROL 0x01
static void topic97_zoom_video(struct pcmcia_socket *sock, int onoff)
{
struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
u8 reg_zv, reg;
reg_zv = config_readb(socket, TOPIC97_ZOOM_VIDEO_CONTROL);
if (onoff) {
reg_zv |= TOPIC97_ZV_CONTROL_ENABLE;
config_writeb(socket, TOPIC97_ZOOM_VIDEO_CONTROL, reg_zv);
reg = config_readb(socket, TOPIC97_MISC2);
reg |= TOPIC97_MISC2_ZV_ENABLE;
config_writeb(socket, TOPIC97_MISC2, reg);
/* not sure this is needed, doc is unclear */
#if 0
reg = config_readb(socket, TOPIC97_AUDIO_VIDEO_SWITCH);
reg |= TOPIC97_AVS_AUDIO_CONTROL | TOPIC97_AVS_VIDEO_CONTROL;
config_writeb(socket, TOPIC97_AUDIO_VIDEO_SWITCH, reg);
#endif
}
else {
reg_zv &= ~TOPIC97_ZV_CONTROL_ENABLE;
config_writeb(socket, TOPIC97_ZOOM_VIDEO_CONTROL, reg_zv);
}
}
static int topic97_override(struct yenta_socket *socket)
{
/* ToPIC97/100 support ZV */
socket->socket.zoom_video = topic97_zoom_video;
return 0;
}
#endif /* _LINUX_TOPIC_H */ #endif /* _LINUX_TOPIC_H */
This diff is collapsed.
...@@ -95,6 +95,15 @@ ...@@ -95,6 +95,15 @@
*/ */
#define CB_MEM_PAGE(map) (0x40 + (map)) #define CB_MEM_PAGE(map) (0x40 + (map))
struct yenta_socket;
struct cardbus_type {
int (*override)(struct yenta_socket *);
void (*save_state)(struct yenta_socket *);
void (*restore_state)(struct yenta_socket *);
int (*sock_init)(struct yenta_socket *);
};
struct yenta_socket { struct yenta_socket {
struct pci_dev *dev; struct pci_dev *dev;
int cb_irq, io_irq; int cb_irq, io_irq;
...@@ -102,9 +111,13 @@ struct yenta_socket { ...@@ -102,9 +111,13 @@ struct yenta_socket {
struct timer_list poll_timer; struct timer_list poll_timer;
struct pcmcia_socket socket; struct pcmcia_socket socket;
struct cardbus_type *type;
/* A few words of private data for special stuff of overrides... */ /* A few words of private data for special stuff of overrides... */
unsigned int private[8]; unsigned int private[8];
/* PCI saved state */
u32 saved_state[18];
}; };
......
...@@ -1345,7 +1345,10 @@ ...@@ -1345,7 +1345,10 @@
#define PCI_VENDOR_ID_TOSHIBA 0x1179 #define PCI_VENDOR_ID_TOSHIBA 0x1179
#define PCI_DEVICE_ID_TOSHIBA_601 0x0601 #define PCI_DEVICE_ID_TOSHIBA_601 0x0601
#define PCI_DEVICE_ID_TOSHIBA_TOPIC95 0x060a #define PCI_DEVICE_ID_TOSHIBA_TOPIC95 0x060a
#define PCI_DEVICE_ID_TOSHIBA_TOPIC95_A 0x0603
#define PCI_DEVICE_ID_TOSHIBA_TOPIC95_B 0x060a
#define PCI_DEVICE_ID_TOSHIBA_TOPIC97 0x060f #define PCI_DEVICE_ID_TOSHIBA_TOPIC97 0x060f
#define PCI_DEVICE_ID_TOSHIBA_TOPIC100 0x0617
#define PCI_VENDOR_ID_TOSHIBA_2 0x102f #define PCI_VENDOR_ID_TOSHIBA_2 0x102f
#define PCI_DEVICE_ID_TOSHIBA_TX3927 0x000a #define PCI_DEVICE_ID_TOSHIBA_TX3927 0x000a
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment