Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
06470ed6
Commit
06470ed6
authored
Jan 25, 2007
by
Mauro Carvalho Chehab
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
V4L/DVB (5149): Convert radio-maxiradio to use video_ioctl2
Signed-off-by:
Mauro Carvalho Chehab
<
mchehab@infradead.org
>
parent
99218fe4
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
121 additions
and
121 deletions
+121
-121
drivers/media/radio/radio-maxiradio.c
drivers/media/radio/radio-maxiradio.c
+121
-121
No files found.
drivers/media/radio/radio-maxiradio.c
View file @
06470ed6
...
...
@@ -27,7 +27,9 @@
* BUGS:
* - card unmutes if you change frequency
*
* Converted to V4L2 API by Mauro Carvalho Chehab <mchehab@infradead.org>
* (c) 2006, 2007 by Mauro Carvalho Chehab <mchehab@infradead.org>:
* - Conversion to V4L2 API
* - Uses video_ioctl2 for parsing and to add debug support
*/
...
...
@@ -87,24 +89,14 @@ module_param(radio_nr, int, 0);
#define BITS2FREQ(x) ((x) * FREQ_STEP - FREQ_IF)
static
int
radio_ioctl
(
struct
inode
*
inode
,
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
);
static
const
struct
file_operations
maxiradio_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
video_exclusive_open
,
.
release
=
video_exclusive_release
,
.
ioctl
=
radio_ioctl
,
.
ioctl
=
video_ioctl2
,
.
compat_ioctl
=
v4l_compat_ioctl32
,
.
llseek
=
no_llseek
,
};
static
struct
video_device
maxiradio_radio
=
{
.
owner
=
THIS_MODULE
,
.
name
=
"Maxi Radio FM2000 radio"
,
.
type
=
VID_TYPE_TUNER
,
.
fops
=
&
maxiradio_fops
,
};
static
struct
radio_device
{
...
...
@@ -181,143 +173,144 @@ static int get_tune(__u16 io)
}
static
inline
int
radio_function
(
struct
inode
*
inode
,
struct
file
*
file
,
unsigned
int
cmd
,
void
*
arg
)
static
int
vidioc_querycap
(
struct
file
*
file
,
void
*
priv
,
struct
v4l2_capability
*
v
)
{
strlcpy
(
v
->
driver
,
"radio-maxiradio"
,
sizeof
(
v
->
driver
));
strlcpy
(
v
->
card
,
"Maxi Radio FM2000 radio"
,
sizeof
(
v
->
card
));
sprintf
(
v
->
bus_info
,
"ISA"
);
v
->
version
=
RADIO_VERSION
;
v
->
capabilities
=
V4L2_CAP_TUNER
;
return
0
;
}
static
int
vidioc_g_tuner
(
struct
file
*
file
,
void
*
priv
,
struct
v4l2_tuner
*
v
)
{
struct
video_device
*
dev
=
video_devdata
(
file
);
struct
radio_device
*
card
=
dev
->
priv
;
switch
(
cmd
)
{
case
VIDIOC_QUERYCAP
:
{
struct
v4l2_capability
*
v
=
arg
;
memset
(
v
,
0
,
sizeof
(
*
v
));
strlcpy
(
v
->
driver
,
"radio-maxiradio"
,
sizeof
(
v
->
driver
));
strlcpy
(
v
->
card
,
"Maxi Radio FM2000 radio"
,
sizeof
(
v
->
card
));
sprintf
(
v
->
bus_info
,
"ISA"
);
v
->
version
=
RADIO_VERSION
;
v
->
capabilities
=
V4L2_CAP_TUNER
;
if
(
v
->
index
>
0
)
return
-
EINVAL
;
return
0
;
}
case
VIDIOC_G_TUNER
:
{
struct
v4l2_tuner
*
v
=
arg
;
memset
(
v
,
0
,
sizeof
(
*
v
));
strcpy
(
v
->
name
,
"FM"
);
v
->
type
=
V4L2_TUNER_RADIO
;
if
(
v
->
index
>
0
)
return
-
EINVAL
;
v
->
rangelow
=
FREQ_LO
;
v
->
rangehigh
=
FREQ_HI
;
v
->
rxsubchans
=
V4L2_TUNER_SUB_MONO
|
V4L2_TUNER_SUB_STEREO
;
v
->
capability
=
V4L2_TUNER_CAP_LOW
;
if
(
get_stereo
(
card
->
io
))
v
->
audmode
=
V4L2_TUNER_MODE_STEREO
;
else
v
->
audmode
=
V4L2_TUNER_MODE_MONO
;
v
->
signal
=
0xffff
*
get_tune
(
card
->
io
);
memset
(
v
,
0
,
sizeof
(
*
v
));
strcpy
(
v
->
name
,
"FM"
);
v
->
type
=
V4L2_TUNER_RADIO
;
return
0
;
}
v
->
rangelow
=
FREQ_LO
;
v
->
rangehigh
=
FREQ_HI
;
v
->
rxsubchans
=
V4L2_TUNER_SUB_MONO
|
V4L2_TUNER_SUB_STEREO
;
v
->
capability
=
V4L2_TUNER_CAP_LOW
;
if
(
get_stereo
(
card
->
io
))
v
->
audmode
=
V4L2_TUNER_MODE_STEREO
;
else
v
->
audmode
=
V4L2_TUNER_MODE_MONO
;
v
->
signal
=
0xffff
*
get_tune
(
card
->
io
);
static
int
vidioc_s_tuner
(
struct
file
*
file
,
void
*
priv
,
struct
v4l2_tuner
*
v
)
{
if
(
v
->
index
>
0
)
return
-
EINVAL
;
return
0
;
}
case
VIDIOC_S_TUNER
:
{
struct
v4l2_tuner
*
v
=
arg
;
return
0
;
}
if
(
v
->
index
>
0
)
return
-
EINVAL
;
static
int
vidioc_s_frequency
(
struct
file
*
file
,
void
*
priv
,
struct
v4l2_frequency
*
f
)
{
struct
video_device
*
dev
=
video_devdata
(
file
);
struct
radio_device
*
card
=
dev
->
priv
;
return
0
;
}
case
VIDIOC_S_FREQUENCY
:
{
struct
v4l2_frequency
*
f
=
arg
;
if
(
f
->
frequency
<
FREQ_LO
||
f
->
frequency
>
FREQ_HI
)
return
-
EINVAL
;
if
(
f
->
frequency
<
FREQ_LO
||
f
->
frequency
>
FREQ_HI
)
return
-
EINVAL
;
card
->
freq
=
f
->
frequency
;
set_freq
(
card
->
io
,
FREQ2BITS
(
card
->
freq
));
msleep
(
125
);
card
->
freq
=
f
->
frequency
;
set_freq
(
card
->
io
,
FREQ2BITS
(
card
->
freq
));
msleep
(
125
);
return
0
;
}
case
VIDIOC_G_FREQUENCY
:
{
struct
v4l2_frequency
*
f
=
arg
;
return
0
;
}
f
->
type
=
V4L2_TUNER_RADIO
;
f
->
frequency
=
card
->
freq
;
static
int
vidioc_g_frequency
(
struct
file
*
file
,
void
*
priv
,
struct
v4l2_frequency
*
f
)
{
struct
video_device
*
dev
=
video_devdata
(
file
);
struct
radio_device
*
card
=
dev
->
priv
;
return
0
;
}
case
VIDIOC_QUERYCTRL
:
{
struct
v4l2_queryctrl
*
qc
=
arg
;
int
i
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
radio_qctrl
);
i
++
)
{
if
(
qc
->
id
&&
qc
->
id
==
radio_qctrl
[
i
].
id
)
{
memcpy
(
qc
,
&
(
radio_qctrl
[
i
]),
sizeof
(
*
qc
));
return
(
0
);
}
}
return
-
EINVAL
;
}
case
VIDIOC_G_CTRL
:
{
struct
v4l2_control
*
ctrl
=
arg
;
switch
(
ctrl
->
id
)
{
case
V4L2_CID_AUDIO_MUTE
:
ctrl
->
value
=
card
->
muted
;
return
(
0
);
}
return
-
EINVAL
;
}
case
VIDIOC_S_CTRL
:
{
struct
v4l2_control
*
ctrl
=
arg
;
switch
(
ctrl
->
id
)
{
case
V4L2_CID_AUDIO_MUTE
:
card
->
muted
=
ctrl
->
value
;
if
(
card
->
muted
)
turn_power
(
card
->
io
,
0
);
else
set_freq
(
card
->
io
,
FREQ2BITS
(
card
->
freq
));
return
0
;
}
return
-
EINVAL
;
f
->
type
=
V4L2_TUNER_RADIO
;
f
->
frequency
=
card
->
freq
;
return
0
;
}
static
int
vidioc_queryctrl
(
struct
file
*
file
,
void
*
priv
,
struct
v4l2_queryctrl
*
qc
)
{
int
i
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
radio_qctrl
);
i
++
)
{
if
(
qc
->
id
&&
qc
->
id
==
radio_qctrl
[
i
].
id
)
{
memcpy
(
qc
,
&
(
radio_qctrl
[
i
]),
sizeof
(
*
qc
));
return
(
0
);
}
}
return
-
EINVAL
;
}
default:
return
v4l_compat_translate_ioctl
(
inode
,
file
,
cmd
,
arg
,
radio_function
);
static
int
vidioc_g_ctrl
(
struct
file
*
file
,
void
*
priv
,
struct
v4l2_control
*
ctrl
)
{
struct
video_device
*
dev
=
video_devdata
(
file
);
struct
radio_device
*
card
=
dev
->
priv
;
switch
(
ctrl
->
id
)
{
case
V4L2_CID_AUDIO_MUTE
:
ctrl
->
value
=
card
->
muted
;
return
(
0
);
}
return
-
EINVAL
;
}
static
int
radio_ioctl
(
struct
inode
*
inode
,
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
int
vidioc_s_ctrl
(
struct
file
*
file
,
void
*
priv
,
struct
v4l2_control
*
ctrl
)
{
struct
video_device
*
dev
=
video_devdata
(
file
);
struct
radio_device
*
card
=
dev
->
priv
;
int
ret
;
mutex_lock
(
&
card
->
lock
);
ret
=
video_usercopy
(
inode
,
file
,
cmd
,
arg
,
radio_function
);
mutex_unlock
(
&
card
->
lock
);
return
ret
;
switch
(
ctrl
->
id
)
{
case
V4L2_CID_AUDIO_MUTE
:
card
->
muted
=
ctrl
->
value
;
if
(
card
->
muted
)
turn_power
(
card
->
io
,
0
);
else
set_freq
(
card
->
io
,
FREQ2BITS
(
card
->
freq
));
return
0
;
}
return
-
EINVAL
;
}
MODULE_AUTHOR
(
"Dimitromanolakis Apostolos, apdim@grecian.net"
);
MODULE_DESCRIPTION
(
"Radio driver for the Guillemot Maxi Radio FM2000 radio."
);
MODULE_LICENSE
(
"GPL"
);
static
struct
video_device
maxiradio_radio
=
{
.
owner
=
THIS_MODULE
,
.
name
=
"Maxi Radio FM2000 radio"
,
.
type
=
VID_TYPE_TUNER
,
.
fops
=
&
maxiradio_fops
,
.
vidioc_querycap
=
vidioc_querycap
,
.
vidioc_g_tuner
=
vidioc_g_tuner
,
.
vidioc_s_tuner
=
vidioc_s_tuner
,
.
vidioc_g_frequency
=
vidioc_g_frequency
,
.
vidioc_s_frequency
=
vidioc_s_frequency
,
.
vidioc_queryctrl
=
vidioc_queryctrl
,
.
vidioc_g_ctrl
=
vidioc_g_ctrl
,
.
vidioc_s_ctrl
=
vidioc_s_ctrl
,
};
static
int
__devinit
maxiradio_init_one
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
ent
)
{
...
...
@@ -389,3 +382,10 @@ static void __exit maxiradio_radio_exit(void)
module_init
(
maxiradio_radio_init
);
module_exit
(
maxiradio_radio_exit
);
MODULE_AUTHOR
(
"Dimitromanolakis Apostolos, apdim@grecian.net"
);
MODULE_DESCRIPTION
(
"Radio driver for the Guillemot Maxi Radio FM2000 radio."
);
MODULE_LICENSE
(
"GPL"
);
module_param_named
(
debug
,
maxiradio_radio
.
debug
,
int
,
0644
);
MODULE_PARM_DESC
(
debug
,
"activates debug info"
);
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