|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! ~% a" L; r! [$ r# _& g
#include <linux/init.h>
5 X/ p- o+ f& ^8 A9 u2 c0 ?#include <linux/module.h>
* S& B/ b' ~: S2 F% Y#include <linux/kernel.h>9 M+ ~" _# A% \5 ]7 r
#include <linux/types.h>
7 P! V* j" [/ ~ R#include <linux/gpio.h>1 \: m% }- G% x6 d3 f0 a* o
#include <linux/leds.h>
) M' i5 }% x* c$ q2 F5 Q( M7 R' j#include <linux/platform_device.h>1 }4 R6 L# t- t' F0 A* F
' e, l: z U0 k) K
#include <asm/mach-types.h>
5 _# I6 ]# b) _#include <asm/mach/arch.h>
9 g. Y4 y5 B+ o7 p3 T#include <mach/da8xx.h>
) `) @5 {( T. ~4 V% L#include <mach/mux.h>
, e& T/ u3 `% M( O6 U9 V% A- W* p! g- E8 R. ]
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 Y. e$ A4 W' @#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 ]4 q A3 g" l( A2 O" L#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 P; D+ ]- G7 \ n' |+ m; u3 V7 G# p#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 J* { Y" {% O6 h: s) w
1 |. [4 B0 e6 a: r7 c( @/* assign the tl som board LED-GPIOs*/
$ c6 Q4 @7 Z2 Jstatic const short da850_evm_tl_user_led_pins[] = {
. Q/ l8 O. U1 c4 G$ u0 a) j. u /* These pins are definition at <mach/mux.h> file */, I: [9 j3 A- ]+ P
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. a8 h! {, l4 B8 O1 {: B' N( ? -1
9 i. |* W& K6 u% f};
) j+ K' p, z! }2 |' t1 I* f2 t4 W9 _8 y+ b. H9 j5 i7 j2 \1 O
static struct gpio_led da850_evm_tl_leds[] = { J6 R% H8 c9 V( A6 E, y7 Q4 q
{
" C3 Q3 {* N o6 k .active_low = 0," a7 L6 I6 X6 i R4 \ @ W; a& k
.gpio = DA850_USER_LED0,6 y- L- o% k# ]; t! ]: W+ a
.name = "user_led0",; l+ {$ n0 @' d& |
.default_trigger = "default-on",; i6 F- @8 Z2 [- N, M+ w4 g6 [( R
},
' A v8 [. B8 ]/ F; u# D5 T {
1 V- j. j) r8 d5 K4 _ .active_low = 0,6 {9 z1 n" v( B: D
.gpio = DA850_USER_LED1,5 Q% I! B4 n* v! ], k( W/ n* A
.name = "user_led1",
' ^! t1 T, l6 l6 s7 G .default_trigger = "default-on",: p0 b2 l1 D9 f5 n F5 {
},
1 Y2 d/ Z7 E( {! @( ^. u% F {
* Q& a! p6 s0 R6 ~4 E .active_low = 0,8 G3 W4 L2 C, S. d. g
.gpio = DA850_USER_LED2,
( ^( A r& ]: w9 ^" v6 y .name = "user_led2",
8 y1 G& u* e8 [5 h- A1 K! i* X7 S .default_trigger = "default-on",, K7 A( }" ~1 X8 P; x! R
},
8 F( {- d/ z- I( H0 T3 {; D {
- D6 t3 H: Q& _ .active_low = 0,3 ~+ J3 R* d& F: W: J
.gpio = DA850_USER_LED3,
. o8 l0 a1 b. ]* z .name = "user_led3",
0 q# j2 z& ?( S% p8 ?/ a8 o .default_trigger = "default-on",
; H: v( @3 y! i },& Q, s* U/ K% W
};. h$ ]* U+ {4 G- o
4 L) k+ B' ? {2 Fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& I* b8 ?- o2 k {
.leds = da850_evm_tl_leds,
4 J q% F" x; ?% q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! q8 w' O+ }! M3 T4 ~};
7 s& |) X, A+ x( H7 B+ I+ k( q1 ]- w4 K* h& j8 N2 K
static void led_dev_release(struct device *dev)
% O5 Z# r& O i' K! F) m8 o{
* y) P! ?( v4 R7 R( i/ q- Y};
& h T0 g2 L! o! g& g+ X" h* G* W: ^- l1 ~, ?. p( L4 ~* j
static struct platform_device da850_evm_tl_leds_device = {
& s& R/ E9 G9 A2 V. | .name = "leds-gpio",
7 V" z3 f# B3 q# } .id = 1,* Z$ S* }/ D) n% n
.dev = {
2 N* i! ?' V$ R3 d+ w .platform_data = &da850_evm_tl_leds_pdata,
/ ~- r; i7 o4 q .release = led_dev_release,. Z8 t! u: A# ^8 h. G" i
}
+ ?+ f! e6 s4 J6 g};6 `3 R+ s* r% M$ }/ T' g: F
; }, d2 f% K2 Ostatic int __init led_platform_init(void)9 R- k1 d4 m2 g. B
{
. Y* ?+ o' q5 `8 o4 s" e- G7 y int ret;
! k( I' Q6 _+ p, `' w- R& Z2 L$ A#if 08 E# o+ {0 @) e
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: `+ a* L/ h7 V" b$ S
if (ret)
( h: ?% j5 U3 y4 @: E) f) @ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; i8 n) W4 U$ ~% t$ Q1 G+ B2 H
"%d\n", ret);# g- b, I* Y. u
#endif
& H0 l: @. q D8 ~ ret = platform_device_register(&da850_evm_tl_leds_device);
* K1 R5 G+ d( o if (ret)# ~2 t2 H2 z9 [3 I$ z
pr_warning("Could not register som GPIO expander LEDS");
; R3 w% F0 \3 J0 Y else
* g& b; {% N) K {& f printk(KERN_INFO "LED register sucessful!\n");) v* c" s7 ^$ l$ p% Q9 ]$ P" \8 B: N2 P
" o4 f4 r c+ \- O) A4 o) I
return ret;
3 }% l( I: ~1 T, F# v6 M}: o! Y* H5 j7 \/ ~6 {7 A
* R$ @3 A- W" A" l! W4 b
static void __exit led_platform_exit(void): S- t y4 o% ]; j | x
{$ T' h7 S* B5 c+ G( c5 _
platform_device_unregister(&da850_evm_tl_leds_device);
. N. m2 R. y# X$ }8 H6 Q- v4 m3 x7 z' z/ r5 Z( e; v3 Z
printk(KERN_INFO "LED unregister!\n");
0 q# z" e7 K2 L}( l; E i' _. i) Z7 E# y0 e1 n. ]
9 d) \- a# @- b3 Q: ^* V
module_init(led_platform_init);
# T9 a$ [8 H( c* @! \0 ?- M6 qmodule_exit(led_platform_exit);! W9 z/ N1 v* H; R6 j" ~/ U
2 ^0 v/ ?8 o. r7 _$ Y6 F/ VMODULE_DESCRIPTION("Led platform driver");
0 l" ?3 M. Y0 T! \& p9 H& g# LMODULE_AUTHOR("Tronlong");+ f0 W7 B$ c' z4 t
MODULE_LICENSE("GPL");. \4 S9 Z" i% r6 J1 T+ f
; e$ i& ]8 a, s5 Q$ \ |
|