|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 O/ |$ H" T& E. d% k3 `#include <linux/init.h>
8 B" p, W+ f; X#include <linux/module.h>
) }+ ?: E2 n% [0 r5 I$ c. y#include <linux/kernel.h>
$ A5 a( f- z; U* k9 ~" l#include <linux/types.h>
- z! y3 a2 |- p- x# s0 F7 E#include <linux/gpio.h># V6 h7 C- W' _2 v
#include <linux/leds.h>6 q8 K' O( _3 z# c6 O7 l
#include <linux/platform_device.h> Y' j' a! u& \' l: |
! d" u3 ~5 S7 D9 x$ F
#include <asm/mach-types.h>, E) i! f$ q5 ~) w# ^
#include <asm/mach/arch.h>+ u$ H. N9 R) l! I
#include <mach/da8xx.h>
+ I9 ^5 ?: I9 X+ g- _( a* n#include <mach/mux.h>3 a1 r2 H F( K) T0 U6 J$ Z% U
/ e+ q- B' H0 U& G
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 i9 A# F( [/ O/ _0 Q- R! B9 {
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 @2 k. O* t+ b) j, }, p
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ t. j9 C2 z6 {) _) D
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( w8 P- B; T2 |+ \% X
% D2 U( \7 \" ]: A
/* assign the tl som board LED-GPIOs*/* v% O7 ~! W2 W- @$ K5 E
static const short da850_evm_tl_user_led_pins[] = { N4 {7 }$ A" G
/* These pins are definition at <mach/mux.h> file */# R( F6 I$ L$ h. u
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, i; ~* H# w7 c6 I' w
-10 c( v6 X, m1 ^8 F8 r" [8 N! L
};% [- I8 n I4 ~- U
; h8 j, T! Z! C) [4 y( o; x6 f
static struct gpio_led da850_evm_tl_leds[] = {+ n- |2 z! Z1 v% G
{
, v l' K. i. \4 R! a' i* y .active_low = 0,7 {4 M( ~1 @! M3 O+ }4 Z
.gpio = DA850_USER_LED0,
$ O* r: w" C! K$ V$ ] .name = "user_led0",
1 z" N5 F% E! ~* \ .default_trigger = "default-on",
& U2 `7 p2 o1 H F9 X4 f }," V; k+ T2 x0 ^) l
{
0 Y) q' f8 l: [1 m+ @1 D .active_low = 0,! i: Q: K2 t a+ Q; x8 a4 @
.gpio = DA850_USER_LED1,# @6 ?; {4 O+ L2 N5 _1 t
.name = "user_led1",
/ D& P- d* W- i" B5 o3 A ` .default_trigger = "default-on",
5 n% D/ W3 f' _( q8 x, L. c4 _- g },5 c+ [ F: O0 X5 X4 ]
{
1 F0 Z5 Z0 U! m' `; w/ H' | .active_low = 0,
* G0 E+ G4 V* S .gpio = DA850_USER_LED2,) M6 L8 O. D$ Q/ p) W8 {' D! f
.name = "user_led2",
* L; G6 y: k* h+ D1 G% w .default_trigger = "default-on",
- Q! `2 }. ?6 H },; [+ s# C+ i1 c5 Q5 [
{. ?9 Z8 H$ Q7 {" x1 m
.active_low = 0,5 Z" F) p" S# I2 Q) F
.gpio = DA850_USER_LED3,: Y- W( X& r5 B9 {
.name = "user_led3",8 u" g! H" N" R8 n
.default_trigger = "default-on",$ e8 @( N4 o S5 u- J. i
},, T6 d' w+ j& d0 t. P
};
. v7 e; g: }" ^. b! N, `7 c/ ^; u9 V9 I7 \8 C9 _
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, o" n) t% h+ I4 [! p1 Z- Q9 U9 d3 M .leds = da850_evm_tl_leds,
1 d* H B6 k% `, H .num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ I/ v; d4 F/ E. W: x
};
$ v k& p2 F' ~
" E) \, y' C2 Y2 c+ D3 Zstatic void led_dev_release(struct device *dev)) f% ?9 Y5 k* D' Z2 O" F. J; L
{
/ ^7 r% M- S% F: ]};) C) {. A" L5 p$ ^; U. v( J
9 m8 b2 s7 K/ q8 n# o: A
static struct platform_device da850_evm_tl_leds_device = {( F9 w n0 w* N1 w* x
.name = "leds-gpio",
, m/ {0 g4 }) m' ^* ^; Q- `: ^ .id = 1,5 q0 K& g* z* ]. p K# f
.dev = {
1 d# b. z/ F4 t" _1 A7 x .platform_data = &da850_evm_tl_leds_pdata,
2 [9 U' |: } z .release = led_dev_release,
: k5 O7 O1 V7 s0 m* [ }
* c. ]% _' M4 a( V3 Y; a};8 _- F! a6 N; G
1 j$ S9 V$ f# }) G' O
static int __init led_platform_init(void)
, Q' N1 E- T4 r+ J1 O% A{
& o3 F, J2 Y) X& O2 i5 M int ret;
; }6 p- G8 l, o* ]) o#if 0: X; i O. _" Q* L/ ?
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: P! m2 X4 t9 W, P6 ]
if (ret)( ], u' A8 f5 b* @$ ^7 T/ F
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 u7 ?' Y2 e, Q# I3 ]
"%d\n", ret);) |( h9 S5 N9 s4 x, c3 d& f p: Y
#endif
$ e. O& a c' ?/ v- S& W& y/ ?0 J* f ret = platform_device_register(&da850_evm_tl_leds_device);# y# ~+ j; U V% |7 O8 R9 O
if (ret)
* I8 E& W# d' Y2 a9 q6 O/ ?& o pr_warning("Could not register som GPIO expander LEDS");
% ]* r3 Q$ f- t/ h+ e else( T2 M7 o3 @5 ?
printk(KERN_INFO "LED register sucessful!\n");
! V. k6 |6 G; p
& o8 U# L$ N* z return ret;
; e7 e4 d0 l: C- L+ P/ Q0 W7 p# L0 Q}5 T3 f* L# K2 k. q+ q4 s5 q) V
6 I$ D1 Q# | F4 \9 n* r7 s, Xstatic void __exit led_platform_exit(void)
' n6 e; K1 B' v( B6 n{7 _2 v" Q' E2 \7 r. `' e! K
platform_device_unregister(&da850_evm_tl_leds_device);" ?' U h) q* T' r0 y$ U6 F8 M
& k% D i0 N' e/ a& f7 c: @
printk(KERN_INFO "LED unregister!\n");, ^" A- F8 S: |0 Z! m, a
}& [# W! w1 `: `; S$ B
2 g2 n4 I( n( \* S+ r' s. p
module_init(led_platform_init);" p: I2 H ~6 M6 T7 C3 j
module_exit(led_platform_exit);- O3 V2 J! O0 f& r1 U6 S( c
) O& J' ^$ G; E$ i3 X p4 f8 l: U' M
MODULE_DESCRIPTION("Led platform driver");
+ v4 _ D) B) c6 |; L; V* r: c9 G! jMODULE_AUTHOR("Tronlong");6 v; X) D0 a5 l/ U/ [2 p. q
MODULE_LICENSE("GPL");
+ }' l' A% i3 K! V
7 p% K# {0 Q. |* x |
|