Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
47150372
Commit
47150372
authored
Sep 01, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://bk.arm.linux.org.uk/linux-2.6-pcmcia
into home.osdl.org:/home/torvalds/v2.5/linux
parents
22e370f9
5a26baff
Changes
7
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
463 additions
and
301 deletions
+463
-301
drivers/pcmcia/cistpl.c
drivers/pcmcia/cistpl.c
+11
-9
drivers/pcmcia/ricoh.h
drivers/pcmcia/ricoh.h
+22
-20
drivers/pcmcia/ti113x.h
drivers/pcmcia/ti113x.h
+105
-80
drivers/pcmcia/topic.h
drivers/pcmcia/topic.h
+58
-14
drivers/pcmcia/yenta_socket.c
drivers/pcmcia/yenta_socket.c
+251
-178
drivers/pcmcia/yenta_socket.h
drivers/pcmcia/yenta_socket.h
+13
-0
include/linux/pci_ids.h
include/linux/pci_ids.h
+3
-0
No files found.
drivers/pcmcia/cistpl.c
View file @
47150372
...
...
@@ -293,6 +293,7 @@ static void read_cis_cache(struct pcmcia_socket *s, int attr, u_int addr,
#endif
ret
=
read_cis_mem
(
s
,
attr
,
addr
,
len
,
ptr
);
if
(
ret
==
0
)
{
/* Copy data into the cache */
cis
=
kmalloc
(
sizeof
(
struct
cis_cache_entry
)
+
len
,
GFP_KERNEL
);
if
(
cis
)
{
...
...
@@ -302,6 +303,7 @@ static void read_cis_cache(struct pcmcia_socket *s, int attr, u_int addr,
memcpy
(
cis
->
cache
,
ptr
,
len
);
list_add
(
&
cis
->
node
,
&
s
->
cis_cache
);
}
}
}
static
void
...
...
drivers/pcmcia/ricoh.h
View file @
47150372
...
...
@@ -142,59 +142,61 @@ static void ricoh_zoom_video(struct pcmcia_socket *sock, int onoff)
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
)
{
switch
(
socket
->
dev
->
device
)
{
/* There may be more .. */
case
PCI_DEVICE_ID_RICOH_RL5C478
:
sock
->
zoom_video
=
ricoh_zoom_video
;
sock
et
->
socket
.
zoom_video
=
ricoh_zoom_video
;
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
);
yenta_init
(
sock
);
ricoh_set_zv
(
sock
);
rl_misc
(
socket
)
=
config_readw
(
socket
,
RL5C4XX_MISC
);
rl_ctl
(
socket
)
=
config_readw
(
socket
,
RL5C4XX_16BIT_CTL
);
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_16BIT_CTL
,
rl_ctl
(
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_CONFIG
,
rl_config
(
socket
));
return
0
;
}
/*
* Magic Ricoh initialization code.. Save state at
* beginning, re-initialize it after suspend.
* Magic Ricoh initialization code..
*/
static
int
ricoh_override
(
struct
yenta_socket
*
socket
)
{
rl_misc
(
socket
)
=
config_readw
(
socket
,
RL5C4XX_MISC
);
rl_ctl
(
socket
)
=
config_readw
(
socket
,
RL5C4XX_16BIT_CTL
);
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
);
u16
config
,
ctl
;
config
=
config_readw
(
socket
,
RL5C4XX_CONFIG
);
/* 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
)
{
rl_ctl
(
socket
)
|=
RL5C46X_16CTL_LEVEL_1
|
RL5C46X_16CTL_LEVEL_2
;
ctl
|=
RL5C46X_16CTL_LEVEL_1
|
RL5C46X_16CTL_LEVEL_2
;
}
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
;
}
...
...
drivers/pcmcia/ti113x.h
View file @
47150372
...
...
@@ -136,16 +136,34 @@
#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
;
if
(
socket
->
cb_irq
)
new
|=
I365_INTR_ENA
;
if
(
new
!=
reg
)
exca_writeb
(
socket
,
I365_INTCTL
,
new
);
return
0
;
static
void
ti_restore_state
(
struct
yenta_socket
*
socket
)
{
config_writel
(
socket
,
TI113X_SYSTEM_CONTROL
,
ti_sysctl
(
socket
));
config_writel
(
socket
,
TI122X_IRQMUX
,
ti_irqmux
(
socket
));
config_writeb
(
socket
,
TI113X_CARD_CONTROL
,
ti_cardctl
(
socket
));
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)
ti_zoom_video
(
sock
,
onoff
);
reg
=
config_readb
(
socket
,
0x84
);
reg
|=
(
1
<<
7
)
;
/* ZV bus enable */
reg
=
config_readb
(
socket
,
TI1250_MULTIMEDIA_CTL
);
reg
|=
TI1250_MMC_ZVOUTEN
;
/* ZV bus enable */
if
(
PCI_FUNC
(
socket
->
dev
->
devfn
)
==
1
)
shift
=
1
;
...
...
@@ -204,12 +222,11 @@ static void ti1250_zoom_video(struct pcmcia_socket *sock, int onoff)
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
)
{
switch
(
socket
->
dev
->
device
)
...
...
@@ -218,24 +235,16 @@ static void ti_set_zv(struct pcmcia_socket *sock)
case
PCI_DEVICE_ID_TI_1220
:
case
PCI_DEVICE_ID_TI_1221
:
case
PCI_DEVICE_ID_TI_1225
:
sock
->
zoom_video
=
ti_zoom_video
;
sock
et
->
socket
.
zoom_video
=
ti_zoom_video
;
break
;
case
PCI_DEVICE_ID_TI_1250
:
case
PCI_DEVICE_ID_TI_1251A
:
case
PCI_DEVICE_ID_TI_1251B
:
case
PCI_DEVICE_ID_TI_1450
:
sock
->
zoom_video
=
ti1250_zoom_video
;
sock
et
->
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)
* This makes us correctly get PCI CSC interrupt
* 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
)
{
u8
new
,
reg
=
exca_readb
(
socket
,
I365_INTCTL
);
...
...
@@ -258,6 +279,8 @@ static int ti_override(struct yenta_socket *socket)
if
(
new
!=
reg
)
exca_writeb
(
socket
,
I365_INTCTL
,
new
);
ti_set_zv
(
socket
);
#if 0
/*
* If ISA interrupts don't work, then fall back to routing card
...
...
@@ -285,83 +308,85 @@ static int ti_override(struct yenta_socket *socket)
}
#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
;
}
static
int
ti113x_override
(
struct
yenta_socket
*
socket
)
{
ti_sysctl
(
socket
)
=
config_readl
(
socket
,
TI113X_SYSTEM_CONTROL
);
ti_cardctl
(
socket
)
=
config_readb
(
socket
,
TI113X_CARD_CONTROL
);
ti_devctl
(
socket
)
=
config_readb
(
socket
,
TI113X_DEVICE_CONTROL
);
u8
cardctl
;
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
)
ti_cardctl
(
socket
)
|=
TI113X_CCR_PCI_IRQ_ENA
|
TI113X_CCR_PCI_CSC
|
TI113X_CCR_PCI_IREQ
;
ti_override
(
socket
);
socket
->
socket
.
ops
->
init
=
ti113x_init
;
return
0
;
cardctl
|=
TI113X_CCR_PCI_IRQ_ENA
|
TI113X_CCR_PCI_CSC
|
TI113X_CCR_PCI_IREQ
;
config_writeb
(
socket
,
TI113X_CARD_CONTROL
,
cardctl
);
return
ti_override
(
socket
)
;
}
static
int
ti12
50_init
(
struct
pcmcia_socket
*
sock
)
static
int
ti12
xx_override
(
struct
yenta_socket
*
socket
)
{
struct
yenta_socket
*
socket
=
container_of
(
sock
,
struct
yenta_socket
,
socket
);
ti113x_init
(
sock
);
ti_irqmux
(
socket
)
=
config_readl
(
socket
,
TI122X_IRQMUX
);
#if 0
ti_irqmux(socket) = (ti_irqmux(socket) & ~0x0f) | 0x02; /* route INTA */
if (!(ti_sysctl(socket) & TI122X_SCR_INTRTIE))
ti_irqmux(socket) |= 0x20; /* route INTB */
#endif
u32
val
;
config_writel
(
socket
,
TI122X_IRQMUX
,
ti_irqmux
(
socket
));
/* make sure that memory burst is active */
val
=
config_readl
(
socket
,
TI113X_SYSTEM_CONTROL
);
if
(
!
(
val
&
TI122X_SCR_MRBURSTUP
))
{
printk
(
KERN_INFO
"Yenta: Enabling burst memory read transactions
\n
"
);
val
|=
TI122X_SCR_MRBURSTUP
;
config_writel
(
socket
,
TI113X_SYSTEM_CONTROL
,
val
);
}
config_writeb
(
socket
,
TI1250_DIAGNOSTIC
,
ti_diag
(
socket
));
return
0
;
/*
* Yenta expects controllers to use CSCINT to route
* 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
)
{
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
)
ti_diag
(
socket
)
|=
TI1250_DIAG_PCI_CSC
|
TI1250_DIAG_PCI_IREQ
;
ti113x_override
(
socket
);
socket
->
socket
.
ops
->
init
=
ti1250_init
;
return
0
;
}
diag
|=
TI1250_DIAG_PCI_CSC
|
TI1250_DIAG_PCI_IREQ
;
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
)
{
/* make sure that memory burst is active */
ti_sysctl
(
socket
)
=
config_readl
(
socket
,
TI113X_SYSTEM_CONTROL
);
ti_sysctl
(
socket
)
|=
TI122X_SCR_MRBURSTUP
;
config_writel
(
socket
,
TI113X_SYSTEM_CONTROL
,
ti_sysctl
(
socket
));
#if 0
/*
* This is highly machine specific, and we should NOT touch
* this register - we have no knowledge how the hardware
* is actually wired.
*
* 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
ti1
13
x_override
(
socket
);
return
ti1
2x
x_override
(
socket
);
}
#endif
/* CONFIG_CARDBUS */
...
...
drivers/pcmcia/topic.h
View file @
47150372
...
...
@@ -31,20 +31,7 @@
#ifndef _LINUX_TOPIC_H
#define _LINUX_TOPIC_H
#ifndef PCI_VENDOR_ID_TOSHIBA
#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 */
/* Register definitions for Toshiba ToPIC95/97/100 controllers */
#define TOPIC_SOCKET_CONTROL 0x0090
/* 32 bit */
#define TOPIC_SCR_IRQSEL 0x00000001
...
...
@@ -93,4 +80,61 @@
#define TOPIC97_RCR_CAUDIO_OFF 0x00000002
#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 */
drivers/pcmcia/yenta_socket.c
View file @
47150372
This diff is collapsed.
Click to expand it.
drivers/pcmcia/yenta_socket.h
View file @
47150372
...
...
@@ -95,6 +95,15 @@
*/
#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
pci_dev
*
dev
;
int
cb_irq
,
io_irq
;
...
...
@@ -102,9 +111,13 @@ struct yenta_socket {
struct
timer_list
poll_timer
;
struct
pcmcia_socket
socket
;
struct
cardbus_type
*
type
;
/* A few words of private data for special stuff of overrides... */
unsigned
int
private
[
8
];
/* PCI saved state */
u32
saved_state
[
18
];
};
...
...
include/linux/pci_ids.h
View file @
47150372
...
...
@@ -1345,7 +1345,10 @@
#define PCI_VENDOR_ID_TOSHIBA 0x1179
#define PCI_DEVICE_ID_TOSHIBA_601 0x0601
#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_TOPIC100 0x0617
#define PCI_VENDOR_ID_TOSHIBA_2 0x102f
#define PCI_DEVICE_ID_TOSHIBA_TX3927 0x000a
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment