|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 d( X' l5 t/ l8 q% t5 y#include <linux/init.h>
& }' I: t# T! M% f' |# d#include <linux/module.h>; h1 @9 H8 v$ m/ D" T. |
#include <linux/kernel.h>" a; Q L# q; w9 j1 F$ g" ]) F
#include <linux/types.h>
( O, _) n1 D6 s2 B, h#include <linux/gpio.h>6 Q) N9 _7 P* M: x( z
#include <linux/leds.h>$ g$ x1 `2 m" U0 d% q% _8 P& D
#include <linux/platform_device.h>
2 i8 O4 e+ W* R
# L* l# X7 C& {6 p5 j: l" N#include <asm/mach-types.h>7 O" M/ g# U& o5 j4 t4 D% Y
#include <asm/mach/arch.h>
9 \2 Z' h$ h1 X#include <mach/da8xx.h># T& @ ^) A9 z5 L
#include <mach/mux.h>
2 P) s% Z' h, i) N8 h
8 U! J8 x6 J P/ Q2 I3 T#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% M: `$ b" ^5 q/ E8 r6 T# ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 F/ \4 o1 l/ r) L( s6 b$ K#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! R2 w4 y) |# E#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; E0 _5 P. q! V* d; ?5 t$ B% C3 a) M& S& }0 h6 [
/* assign the tl som board LED-GPIOs*/( ~8 A& A7 e- N6 j' M l
static const short da850_evm_tl_user_led_pins[] = {6 h, k7 h' }2 [; s% V$ }; M
/* These pins are definition at <mach/mux.h> file */# J5 x* G1 I% p. t/ z5 G0 U6 U0 ?9 M
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( ?7 W9 k7 M. Y. v8 Z& ` -1
3 f9 _$ D5 L/ @. M7 @7 k9 I9 X};1 u! [3 S) S! q& z- Z
) A) ~& y3 M0 c/ E
static struct gpio_led da850_evm_tl_leds[] = {5 E2 @4 W |% R/ q; \( l4 Q
{
) q1 n" E' _' D& V& l. j8 ` .active_low = 0,
8 }& u" f8 O# D3 z( @+ {% V8 r1 s .gpio = DA850_USER_LED0,
! ?' Z+ C4 [9 g% P# B. X .name = "user_led0",
/ s2 e) |) a5 | U& T: s: d .default_trigger = "default-on",
' {# F( h1 \- e' m5 O& p },* ?& g. q6 X5 \- g F
{% |7 ~1 N. s1 Q. l8 b
.active_low = 0,( o0 J; @+ V- e( C+ L/ d T
.gpio = DA850_USER_LED1,9 S. c, a, J0 s; c& Y/ L- J
.name = "user_led1",
' h) m: |1 ]! F9 o; o1 Q& v- } .default_trigger = "default-on",/ q6 h5 n/ L# W3 Y- C2 _) ^/ ]% v* p) {
},$ \8 d, }3 [* N- }$ r# J5 F& _" o
{
6 M R' F1 K* C6 q .active_low = 0,* E1 Z9 \& [$ v. ~( f: G4 |
.gpio = DA850_USER_LED2,
5 R& B% ^5 H+ v3 b+ P .name = "user_led2",+ q7 R) G. d% Q: i' }, k6 W7 c
.default_trigger = "default-on",
- u# v, M5 V. _/ F0 \+ C* \" _$ j9 t },
7 S& ^8 }! n; R4 `8 N {
8 ?5 m" T* O3 H7 H; U .active_low = 0,8 F3 s/ x# s6 l$ e ?: i1 `( I: k1 a
.gpio = DA850_USER_LED3,% H4 W* d* f$ y8 Z+ Q3 {! m
.name = "user_led3",+ W8 u( M/ w/ d/ `7 @$ Z
.default_trigger = "default-on",
8 |3 h2 P0 u& \( t5 F2 O+ C2 I },
" R0 }! P& S6 g: v3 c' @};
# ?# `; @& @ v6 J2 \
2 J; r' Y2 R1 h7 ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
F! ^* R& o8 o# ~+ C; H .leds = da850_evm_tl_leds,: X$ d( }2 [% M4 {0 w# u* f5 K% r( _" ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ c& v5 z) U; M" C3 M
};
2 U0 Q; y0 g5 x. ?- R/ ~
% E% ]! T% k7 [( bstatic void led_dev_release(struct device *dev)* x z6 a d* x5 l0 ?7 ~! v) c P
{
5 G, X9 A" X0 ~5 a};! L2 y6 B( F( n* O) e* ]% h$ I& ?
" J% z3 e1 w/ G, N; N& D3 }+ o: n# @. I1 D
static struct platform_device da850_evm_tl_leds_device = {
; w8 |1 j* Z9 i .name = "leds-gpio",% T, z- f+ l* o N8 A( U" f
.id = 1,* u: @# q! v' }4 C* N
.dev = {
. R# j+ f" m. P .platform_data = &da850_evm_tl_leds_pdata,
' @! {* O. D$ @( i9 | .release = led_dev_release,0 Z- q& l J% @4 f
}
( v( y- `5 g- R9 H7 t; s; u8 z};3 F. L# u/ c& m# ~2 `, S
0 A j) y( B+ n& A( g9 k8 ?, Q
static int __init led_platform_init(void)+ O' v {- Q( p* f9 s# `- Y
{. d) g$ {+ F0 e- |
int ret;2 t4 @' t- r4 Q7 ~6 P) d
#if 0
/ E9 o1 T, z, U ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; R2 w' u8 G2 V5 l4 c* B y0 A if (ret)- I8 p( b& c; Y- z" ^
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 {, z% d' H1 | s. D N
"%d\n", ret);: q$ a. y* a5 o
#endif
; `, ~+ a1 _' m, f ret = platform_device_register(&da850_evm_tl_leds_device);) c' x+ A$ }8 q( d$ `4 {$ B# L' D
if (ret)
8 M' ], l% h/ A, a U pr_warning("Could not register som GPIO expander LEDS");% O/ f7 W0 O" U( O" Y
else
/ c7 s, ]1 i, H printk(KERN_INFO "LED register sucessful!\n");
2 B$ @: {6 @4 i. I3 ?8 m7 b a
* I, O5 r F7 f0 y return ret;
, g5 o* y- N8 M2 H( t1 g}4 S* P6 w" G2 [( L, C
9 D$ C4 R2 a2 j0 r: @ u% F1 ?static void __exit led_platform_exit(void)$ F8 ~- M; y: W5 [2 H# [$ T/ K
{
' w3 K! h2 ]3 M3 K platform_device_unregister(&da850_evm_tl_leds_device);3 ~3 _) u' y' G5 ^1 B' ]6 l
) h" d+ i( x! F- u' ~# {7 Q! `* U printk(KERN_INFO "LED unregister!\n");5 r/ z, r! U5 D
}) ^* s' i) v+ {) p' b
, m/ S% G$ q/ w* d2 l1 I, r: ]! t" w
module_init(led_platform_init);
7 F) m6 {$ M. c* O8 i+ u2 Ymodule_exit(led_platform_exit);9 l8 A% k: l! |# A& k" \; P( m
3 _$ m' k- S8 Q1 \MODULE_DESCRIPTION("Led platform driver");
2 |/ l0 S& q! `: w( w6 oMODULE_AUTHOR("Tronlong");1 K4 n: ^- S0 ` p5 h4 K2 \
MODULE_LICENSE("GPL");
: Y. [8 K# W0 S9 u# E8 N
7 i/ Z3 m3 G( u/ j, W, M |
|