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
nexedi
linux
Commits
106c7ec8
Commit
106c7ec8
authored
May 02, 2004
by
Hanna V. Linder
Committed by
Greg Kroah-Hartman
May 02, 2004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] Add class support to drivers/char/ip2main.c
parent
0b5efc22
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
40 additions
and
6 deletions
+40
-6
drivers/char/ip2main.c
drivers/char/ip2main.c
+40
-6
No files found.
drivers/char/ip2main.c
View file @
106c7ec8
...
...
@@ -99,6 +99,7 @@
#include <linux/slab.h>
#include <linux/major.h>
#include <linux/wait.h>
#include <linux/device.h>
#include <linux/tty.h>
#include <linux/tty_flip.h>
...
...
@@ -301,6 +302,9 @@ static int iindx;
static
char
rirqs
[
IP2_MAX_BOARDS
];
static
int
Valid_Irqs
[]
=
{
3
,
4
,
5
,
7
,
10
,
11
,
12
,
15
,
0
};
/* for sysfs class support */
static
struct
class_simple
*
ip2_class
;
// Some functions to keep track of what irq's we have
static
int
__init
...
...
@@ -411,7 +415,9 @@ cleanup_module(void)
iiResetDelay
(
i2BoardPtrTable
[
i
]
);
/* free io addresses and Tibet */
release_region
(
ip2config
.
addr
[
i
],
8
);
class_simple_device_remove
(
MKDEV
(
IP2_IPL_MAJOR
,
4
*
i
));
devfs_remove
(
"ip2/ipl%d"
,
i
);
class_simple_device_remove
(
MKDEV
(
IP2_IPL_MAJOR
,
4
*
i
+
1
));
devfs_remove
(
"ip2/stat%d"
,
i
);
}
/* Disable and remove interrupt handler. */
...
...
@@ -420,6 +426,7 @@ cleanup_module(void)
clear_requested_irq
(
ip2config
.
irq
[
i
]);
}
}
class_simple_destroy
(
ip2_class
);
devfs_remove
(
"ip2"
);
if
(
(
err
=
tty_unregister_driver
(
ip2_tty_driver
)
)
)
{
printk
(
KERN_ERR
"IP2: failed to unregister tty driver (%d)
\n
"
,
err
);
...
...
@@ -494,7 +501,7 @@ int
ip2_loadmain
(
int
*
iop
,
int
*
irqp
,
unsigned
char
*
firmware
,
int
firmsize
)
{
int
i
,
j
,
box
;
int
err
;
int
err
=
0
;
int
status
=
0
;
static
int
loaded
;
i2eBordStrPtr
pB
=
NULL
;
...
...
@@ -683,7 +690,14 @@ ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize)
/* Register the IPL driver. */
if
(
(
err
=
register_chrdev
(
IP2_IPL_MAJOR
,
pcIpl
,
&
ip2_ipl
)
)
)
{
printk
(
KERN_ERR
"IP2: failed to register IPL device (%d)
\n
"
,
err
);
}
else
}
else
{
/* create the sysfs class */
ip2_class
=
class_simple_create
(
THIS_MODULE
,
"ip2"
);
if
(
IS_ERR
(
ip2_class
))
{
err
=
PTR_ERR
(
ip2_class
);
goto
out_chrdev
;
}
}
/* Register the read_procmem thing */
if
(
!
create_proc_info_entry
(
"ip2mem"
,
0
,
&
proc_root
,
ip2_read_procmem
))
{
printk
(
KERN_ERR
"IP2: failed to register read_procmem
\n
"
);
...
...
@@ -700,13 +714,27 @@ ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize)
}
if
(
NULL
!=
(
pB
=
i2BoardPtrTable
[
i
]
)
)
{
devfs_mk_cdev
(
MKDEV
(
IP2_IPL_MAJOR
,
4
*
i
),
class_simple_device_add
(
ip2_class
,
MKDEV
(
IP2_IPL_MAJOR
,
4
*
i
),
NULL
,
"ipl%d"
,
i
);
err
=
devfs_mk_cdev
(
MKDEV
(
IP2_IPL_MAJOR
,
4
*
i
),
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IFCHR
,
"ip2/ipl%d"
,
i
);
if
(
err
)
{
class_simple_device_remove
(
MKDEV
(
IP2_IPL_MAJOR
,
4
*
i
));
goto
out_class
;
}
devfs_mk_cdev
(
MKDEV
(
IP2_IPL_MAJOR
,
4
*
i
+
1
),
class_simple_device_add
(
ip2_class
,
MKDEV
(
IP2_IPL_MAJOR
,
4
*
i
+
1
),
NULL
,
"stat%d"
,
i
);
err
=
devfs_mk_cdev
(
MKDEV
(
IP2_IPL_MAJOR
,
4
*
i
+
1
),
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IFCHR
,
"ip2/stat%d"
,
i
);
if
(
err
)
{
class_simple_device_remove
(
MKDEV
(
IP2_IPL_MAJOR
,
4
*
i
+
1
));
goto
out_class
;
}
for
(
box
=
0
;
box
<
ABS_MAX_BOXES
;
++
box
)
{
...
...
@@ -759,8 +787,14 @@ ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize)
}
}
ip2trace
(
ITRC_NO_PORT
,
ITRC_INIT
,
ITRC_RETURN
,
0
);
return
0
;
goto
out
;
out_class:
class_simple_destroy
(
ip2_class
);
out_chrdev:
unregister_chrdev
(
IP2_IPL_MAJOR
,
"ip2"
);
out:
return
err
;
}
EXPORT_SYMBOL
(
ip2_loadmain
);
...
...
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