Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
media
pci
mantis
mantis_pcmcia.c
Go to the documentation of this file.
1
/*
2
Mantis PCI bridge driver
3
4
Copyright (C) Manu Abraham (
[email protected]
)
5
6
This program is free software; you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 2 of the License, or
9
(at your option) any later version.
10
11
This program is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
GNU General Public License for more details.
15
16
You should have received a copy of the GNU General Public License
17
along with this program; if not, write to the Free Software
18
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19
*/
20
21
#include <linux/kernel.h>
22
23
#include <linux/signal.h>
24
#include <linux/sched.h>
25
#include <
linux/interrupt.h
>
26
#include <asm/io.h>
27
28
#include "
dmxdev.h
"
29
#include "
dvbdev.h
"
30
#include "
dvb_demux.h
"
31
#include "
dvb_frontend.h
"
32
#include "
dvb_net.h
"
33
34
#include "
mantis_common.h
"
35
#include "
mantis_link.h
"
/* temporary due to physical layer stuff */
36
#include "
mantis_reg.h
"
37
38
/*
39
* If Slot state is already PLUG_IN event and we are called
40
* again, definitely it is jitter alone
41
*/
42
void
mantis_event_cam_plugin
(
struct
mantis_ca
*
ca
)
43
{
44
struct
mantis_pci
*mantis = ca->
ca_priv
;
45
46
u32
gpif_irqcfg;
47
48
if
(ca->
slot_state
==
MODULE_XTRACTED
) {
49
dprintk
(
MANTIS_DEBUG
, 1,
"Event: CAM Plugged IN: Adapter(%d) Slot(0)"
, mantis->
num
);
50
udelay
(50);
51
mmwrite
(0xda000000,
MANTIS_CARD_RESET
);
52
gpif_irqcfg =
mmread
(
MANTIS_GPIF_IRQCFG
);
53
gpif_irqcfg |=
MANTIS_MASK_PLUGOUT
;
54
gpif_irqcfg &= ~
MANTIS_MASK_PLUGIN
;
55
mmwrite
(gpif_irqcfg,
MANTIS_GPIF_IRQCFG
);
56
udelay
(500);
57
ca->
slot_state
=
MODULE_INSERTED
;
58
}
59
udelay
(100);
60
}
61
62
/*
63
* If Slot state is already UN_PLUG event and we are called
64
* again, definitely it is jitter alone
65
*/
66
void
mantis_event_cam_unplug
(
struct
mantis_ca
*
ca
)
67
{
68
struct
mantis_pci
*mantis = ca->
ca_priv
;
69
70
u32
gpif_irqcfg;
71
72
if
(ca->
slot_state
==
MODULE_INSERTED
) {
73
dprintk
(
MANTIS_DEBUG
, 1,
"Event: CAM Unplugged: Adapter(%d) Slot(0)"
, mantis->
num
);
74
udelay
(50);
75
mmwrite
(0x00da0000,
MANTIS_CARD_RESET
);
76
gpif_irqcfg =
mmread
(
MANTIS_GPIF_IRQCFG
);
77
gpif_irqcfg |=
MANTIS_MASK_PLUGIN
;
78
gpif_irqcfg &= ~
MANTIS_MASK_PLUGOUT
;
79
mmwrite
(gpif_irqcfg,
MANTIS_GPIF_IRQCFG
);
80
udelay
(500);
81
ca->
slot_state
=
MODULE_XTRACTED
;
82
}
83
udelay
(100);
84
}
85
86
int
mantis_pcmcia_init
(
struct
mantis_ca
*
ca
)
87
{
88
struct
mantis_pci
*mantis = ca->
ca_priv
;
89
90
u32
gpif_stat, card_stat;
91
92
mmwrite
(
mmread
(
MANTIS_INT_MASK
) |
MANTIS_INT_IRQ0
,
MANTIS_INT_MASK
);
93
gpif_stat =
mmread
(
MANTIS_GPIF_STATUS
);
94
card_stat =
mmread
(
MANTIS_GPIF_IRQCFG
);
95
96
if
(gpif_stat &
MANTIS_GPIF_DETSTAT
) {
97
dprintk
(
MANTIS_DEBUG
, 1,
"CAM found on Adapter(%d) Slot(0)"
, mantis->
num
);
98
mmwrite
(card_stat |
MANTIS_MASK_PLUGOUT
,
MANTIS_GPIF_IRQCFG
);
99
ca->
slot_state
=
MODULE_INSERTED
;
100
dvb_ca_en50221_camchange_irq
(&ca->
en50221
,
101
0,
102
DVB_CA_EN50221_CAMCHANGE_INSERTED
);
103
}
else
{
104
dprintk
(
MANTIS_DEBUG
, 1,
"Empty Slot on Adapter(%d) Slot(0)"
, mantis->
num
);
105
mmwrite
(card_stat |
MANTIS_MASK_PLUGIN
,
MANTIS_GPIF_IRQCFG
);
106
ca->
slot_state
=
MODULE_XTRACTED
;
107
dvb_ca_en50221_camchange_irq
(&ca->
en50221
,
108
0,
109
DVB_CA_EN50221_CAMCHANGE_REMOVED
);
110
}
111
112
return
0;
113
}
114
115
void
mantis_pcmcia_exit
(
struct
mantis_ca
*
ca
)
116
{
117
struct
mantis_pci
*mantis = ca->
ca_priv
;
118
119
mmwrite
(
mmread
(
MANTIS_GPIF_STATUS
) & (~
MANTIS_CARD_PLUGOUT
| ~
MANTIS_CARD_PLUGIN
),
MANTIS_GPIF_STATUS
);
120
mmwrite
(
mmread
(
MANTIS_INT_MASK
) & ~
MANTIS_INT_IRQ0
,
MANTIS_INT_MASK
);
121
}
Generated on Thu Jan 10 2013 13:48:21 for Linux Kernel by
1.8.2