|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 I) F ] F: P/ B2 `; e% s#include <linux/init.h>
1 H; H9 `. }8 w; b# u( \#include <linux/module.h># a8 g9 E5 S) K2 h9 M8 B
#include <linux/kernel.h>) T" f! p' V6 B5 b' H6 S$ V
#include <linux/types.h>
6 b" t0 M. K9 }5 ^- c- P w9 E#include <linux/gpio.h>3 l/ o7 d+ l& z# n$ o
#include <linux/leds.h>% V! o4 ~' r7 h0 @! w, f& H) X
#include <linux/platform_device.h> r8 @3 ~8 E# o9 C* ^! o
2 k: K9 }8 d0 P8 h
#include <asm/mach-types.h>
- l- H4 J# ^* {- i/ R#include <asm/mach/arch.h>
$ n) f6 A8 `* @ j* s* C#include <mach/da8xx.h>
( }0 E. t% N7 {8 M5 r+ Z: b#include <mach/mux.h>
. q: J" ~8 {1 h; f, a% f0 h6 u5 r/ u
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- h% r1 p& G# G% m: s+ V4 m#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
{" m+ Z: G, j- V8 i- B#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, |$ N' T+ P6 ~3 v' ] v3 S#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 p# H2 v( P- I
1 X) ^7 T# q# U) z) a" T
/* assign the tl som board LED-GPIOs*/
0 z0 \& J% x+ }5 [) z4 Sstatic const short da850_evm_tl_user_led_pins[] = {
/ o0 o4 ]& l5 o2 Q/ F* A /* These pins are definition at <mach/mux.h> file */
6 G0 i2 u% S2 E: u& J% H DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 k3 G6 e/ s. T' K
-1$ O4 T1 g4 Z* H& s& f) w1 Y; D* F
};
# A+ O" V( A- |/ o# E" w7 ?3 i1 b# Q0 L% j* q
static struct gpio_led da850_evm_tl_leds[] = {
2 \, i3 Y( v# G) m; k) X8 f: c. h o4 D {
; i: C4 H% H+ T .active_low = 0,
! T% v/ h; c4 f4 N: X" k .gpio = DA850_USER_LED0,
; Z3 u3 j2 ^# j* I* t ?4 J0 \8 T .name = "user_led0",
6 [* O& h7 Y; t" \ .default_trigger = "default-on",
7 z2 D; l$ [ G2 Q/ m& w# d },0 _8 l" m: j Z" i7 E3 _
{
7 C9 D! Y1 |7 L$ S .active_low = 0,6 @- a3 M. ?$ K) l. Y+ O
.gpio = DA850_USER_LED1,: { E: T" R( s. d3 H. e* Q! b8 [* S
.name = "user_led1",
. }1 `& M" F$ D8 D7 @ .default_trigger = "default-on",9 o1 l w" I, l, Y6 N( F, Q. O
}," L: a9 Y4 k8 J% b' }
{
- u8 j1 J7 m' [: o2 P1 y* x$ X) l2 z .active_low = 0,
/ O+ a: E( n* U# B% T/ ?$ S .gpio = DA850_USER_LED2,
0 t( x# J( `8 A: f7 k .name = "user_led2",
3 {) J6 G. e' l+ {) S .default_trigger = "default-on",1 O% E8 ^8 L$ ~4 t
},, l( ]% F( w! a) s* J
{/ |1 `( r! {8 ~2 Z% E
.active_low = 0,' L! a' ?3 n0 [8 }( R
.gpio = DA850_USER_LED3,! d; d$ f5 {* x! B' a
.name = "user_led3",
+ `9 J' W C9 x4 L6 P5 ?% F) Y* D .default_trigger = "default-on",+ q, j8 n0 r$ I3 M9 y
},
7 Z) V3 @) c% W* C$ o5 j};
4 V. ~* k$ k% q5 T9 o, C& |2 _1 q% m& X; m. H; g" `6 |
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; W: M0 h) L( n3 A# e5 Z .leds = da850_evm_tl_leds,
% i- F/ r6 v- A% |# ` .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) G# n( B& V; P; n; ^- h# p};
) P5 b8 {" M/ J/ }; m
+ Z5 p& M7 u$ T) n9 dstatic void led_dev_release(struct device *dev)
* n# r$ s% a5 {* Y$ P{1 {+ ~$ ~* P! r! w; \& @. d
};9 H" x( j8 s' x' l; W$ j
/ @! `$ K$ M; N* Q$ G. V( Wstatic struct platform_device da850_evm_tl_leds_device = {
2 a+ V4 a* Y$ C* J$ [6 r .name = "leds-gpio",
. g/ z5 c3 l. l .id = 1,
& J1 j# q; j' J. T' ] .dev = {5 Z- T& S/ p9 m2 {7 \
.platform_data = &da850_evm_tl_leds_pdata,
+ K# J# g4 A, ] .release = led_dev_release,
+ t& `% L5 E* K. v4 f5 z; d3 ` }
# e( }. z2 [- |$ h: V7 I1 m d};! t" b; F2 _, D3 C
' t9 j+ z! P3 Z; C5 v0 @: o
static int __init led_platform_init(void)
2 R3 T/ v K% S3 g T h{ x/ r" A6 T [" Z, @: S( h* Y
int ret;& U6 e* d0 D l: u( A" U9 |3 n
#if 0
( c5 |. J2 E% @4 S+ H' f. s$ L ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ D% ?5 n( `2 ~ L) ` i if (ret)
+ H X S5 `0 Y3 F pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, W' C/ U) G0 \+ L* G! s "%d\n", ret);
' ^& K' v' g" [' e) |#endif# y9 F2 p4 z; Q0 g D
ret = platform_device_register(&da850_evm_tl_leds_device);
" z- l" x; v" v. p! S; I if (ret)& o0 n+ R _% i% b/ f
pr_warning("Could not register som GPIO expander LEDS");; G$ p; T3 K* h. c2 r
else
G+ W8 K' A! j) G7 `5 C5 g7 u printk(KERN_INFO "LED register sucessful!\n");
) u7 C, [" r4 B: N0 E9 H( C" n! @0 h* a0 U- m: ?, Z
return ret;7 B2 d; e, M5 {4 b7 {
}" L: `1 c& g; k( h( D+ V
2 N/ Y& h' n) o
static void __exit led_platform_exit(void)2 S9 h; }, F5 X+ W
{ z' F7 T+ d7 a" @6 M, K' G
platform_device_unregister(&da850_evm_tl_leds_device);
. `# V9 J4 e" G% R! `( B ^+ C2 h7 S3 Z% @" T: y: O+ W4 w( g
printk(KERN_INFO "LED unregister!\n");
4 n9 v$ g: K* h1 N+ P+ S/ v}% b8 j4 k9 i2 k
4 q( I& ^, Y( W& p5 amodule_init(led_platform_init);
* r6 A& [# T7 o" c" smodule_exit(led_platform_exit);
1 U* h$ R# V! J S
& s+ `4 D3 B% M. |7 x7 c+ {MODULE_DESCRIPTION("Led platform driver");
$ W2 F9 c) R* Z2 i2 m$ sMODULE_AUTHOR("Tronlong");+ ~# Q: \1 V3 B
MODULE_LICENSE("GPL");9 Y- D2 L7 Z/ H0 p8 o
/ N& j6 W5 ]! F1 \1 ?6 G* e. m, Z
|
|