|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; ^% e |) |6 X; S7 Z3 R
#include <linux/init.h>$ Q+ d% a* G1 W# B) y7 X: [ g* Z
#include <linux/module.h>
# j3 `6 d+ X j+ \) `#include <linux/kernel.h>
2 K$ j( b& h" r- s#include <linux/types.h>3 D( A7 [) T$ I% R/ n
#include <linux/gpio.h>
7 z" v+ I# L" ]6 [: \4 L#include <linux/leds.h>
$ e+ ~9 V- e! s1 Y#include <linux/platform_device.h>
! T( d/ r3 k' W, I' \" a4 v& w& j6 A5 ]; w& e3 @
#include <asm/mach-types.h>
# `& p( X7 F# R! V5 X#include <asm/mach/arch.h> n! R, c9 X, t& p" |! S
#include <mach/da8xx.h>' L' B% ~7 [& j; o+ \
#include <mach/mux.h>+ X) w8 s# u7 x+ y* P
4 R3 _4 y& c% z- D
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. Q) { W$ z3 Q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# R; [! z$ Y; A- q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 g( S! E$ K: Z3 ^
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* Y6 t4 G! f( \% l. S! k
8 ?3 E! o: N" ]7 ^/* assign the tl som board LED-GPIOs*/
& H$ L2 q- p' Ystatic const short da850_evm_tl_user_led_pins[] = {
, |7 o6 V' e. B' } /* These pins are definition at <mach/mux.h> file */
, H+ Y* a6 g8 G DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' c8 v! p& n( W% r" N+ n" S' v4 G -1
; Y) g, o( q: W* @) p4 |% E};% }5 x: v* G3 q7 v
& I9 Y$ @8 |! W8 Z3 P" J* C
static struct gpio_led da850_evm_tl_leds[] = {, p% a7 m* N" l! P1 A
{, W( V/ S/ s1 J5 J* a/ V1 p* W& ]
.active_low = 0,
& q n; |+ j( [" q. V .gpio = DA850_USER_LED0,+ I, r% h9 ~5 d- r
.name = "user_led0",9 S r q0 i. ~5 Y# O+ O
.default_trigger = "default-on",
) c& e) P% ^2 { },( ?- U& Y- v3 c1 b( g/ O8 N
{
2 o2 C% U% p% e" ]/ b; W v .active_low = 0,/ T: ?9 G6 {( J" q- Z
.gpio = DA850_USER_LED1,3 y9 Y% l6 R& m6 T7 j- l* g
.name = "user_led1",+ i' |. m1 d$ Y9 }
.default_trigger = "default-on",
/ R! W) N, H5 ^4 Y7 r8 c+ Z" [' I },
4 a* r2 T: p6 F/ g) ~9 l, S {
2 b/ @8 y+ b( A* R# b3 | .active_low = 0,
, m" H; J1 V6 U. w" M- r .gpio = DA850_USER_LED2,% i+ U# J( [# }3 K# E5 p1 H
.name = "user_led2",- U# r3 m& G/ ? q' t0 @
.default_trigger = "default-on",
2 V1 o1 D. a1 ^; Q" U# ~. U },& t" D* Q6 {2 P& n7 \
{
# j$ y8 I4 t" ?5 I .active_low = 0,( e- Y5 |8 b2 X Y( Z. c5 d/ j
.gpio = DA850_USER_LED3,
+ Z" k/ }3 } H9 E+ ]/ D .name = "user_led3",7 B) l3 a6 F5 w& c1 j% t, A
.default_trigger = "default-on",
! Y2 _8 K: @" Q. ^5 K: J },* i9 {3 A% H/ ] ?, v& L) D: K( P
};5 E; K' L; B. Y5 @
; P3 Y/ y2 g+ C) q2 x: V: r; X& }static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) \% X6 a$ I: Y! O! q* k
.leds = da850_evm_tl_leds,
" W! G' d, N4 X6 \ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 h; t' B |0 a# D! A$ c6 j};
: C% y( z( a q D t) B' @4 `" `- D3 j. l3 u$ q4 o5 n; x' `
static void led_dev_release(struct device *dev)
& R- K+ F% j+ R! _7 M0 \{
! H [ N( C6 Z};& |: x+ Y) |( p( I9 i5 F* D4 j0 t; _
" x. `, Q! k' I7 ?" |static struct platform_device da850_evm_tl_leds_device = {% N! A& o# X7 D# C4 D
.name = "leds-gpio",
( B1 |, j8 j( W/ w9 t# [0 d; E .id = 1,0 ^' H; d f5 s& d
.dev = {- u, O0 z8 A; A! M2 j0 b$ f
.platform_data = &da850_evm_tl_leds_pdata,
( L( t5 w& [! Y+ t# P .release = led_dev_release,
+ h$ m% m/ O6 R# M6 J4 G6 C% o3 o }8 V; t* q9 a$ ?4 W6 B: `
};7 T0 Y/ {& Y9 a- r% H2 T$ {2 ^
9 }6 `, l, w$ W6 B6 o
static int __init led_platform_init(void). R3 E& k- F: h" w: `: q
{
! u5 ]- k$ R9 ?2 A int ret;8 l' `- l$ e1 q5 r2 j
#if 03 K1 a% L" ]# [7 `" c8 S% ]0 s
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, {+ {6 A' M y. A% ` if (ret)
5 u2 k3 N5 W) `+ I) X1 D( U% O pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 E, l) g6 M* {4 ^/ U
"%d\n", ret);8 v, k! @" o6 Y% F- F" V _
#endif
/ R4 {7 u& F9 b ret = platform_device_register(&da850_evm_tl_leds_device);' ~7 ~: \0 I8 i* p+ m& z, c$ V7 Y
if (ret)
9 o- ~* g& P$ S; Y5 g" ?. a pr_warning("Could not register som GPIO expander LEDS");
* Q3 ]1 l/ y! ^ c1 ~ else" Q4 f8 C0 O# @+ d- C: m
printk(KERN_INFO "LED register sucessful!\n");" Q# w3 w& d: n# }. k
. z$ V f2 o( N6 n, }) k; e% Z return ret;
8 a; g* a8 _5 C" ~" g6 f}5 Q' R5 F0 B/ A
% h$ S X8 d( U3 n" f& Q% ostatic void __exit led_platform_exit(void)+ B: m, L4 f C3 g; [ y# A/ V0 e
{: i# {6 V+ S" d# q; t
platform_device_unregister(&da850_evm_tl_leds_device);1 T# H) F) d! l: L+ Q
- L$ W9 X$ A% \1 j printk(KERN_INFO "LED unregister!\n");
4 C9 y, O( l3 @# e/ Q1 e}
# g6 [8 o2 W) e! |/ g0 A, n; \
1 r5 h2 e2 ?6 amodule_init(led_platform_init);
1 T O& B( h: ~! m4 ^module_exit(led_platform_exit);$ E% Q2 k7 v( p0 l4 U# {0 q
& p5 W0 P2 K- e5 Z3 Y4 Q4 U5 G4 dMODULE_DESCRIPTION("Led platform driver");* O" ]8 c$ z4 x( r5 E5 c
MODULE_AUTHOR("Tronlong"); T6 {8 C3 q5 N$ Y0 ?/ P- T1 x
MODULE_LICENSE("GPL");1 n6 S, g+ z [' \
' B i' @, u! M+ ?& c9 ~1 L7 J |
|