|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 j) V# f d# t1 w. E. ]#include <linux/init.h>
7 X, \( J: Y% Y1 \! V#include <linux/module.h>! V, E! a& N8 V, G
#include <linux/kernel.h>
" v4 w! q# q' k* n#include <linux/types.h>
+ U% B; Z4 Q. O8 ?) u$ K#include <linux/gpio.h>
% ^7 l5 X) v7 W. c- q. \1 g7 P, c#include <linux/leds.h>' j) K# R# T0 L. N# l, I* B! T
#include <linux/platform_device.h>9 [/ b+ A2 Y6 g1 \& p& y8 k; k3 K
( ~8 J; n+ p! p) [
#include <asm/mach-types.h>; n1 ~' I( l1 O- a
#include <asm/mach/arch.h>
1 a/ V5 [6 w. ~. `6 ?#include <mach/da8xx.h>8 X u% R' ~& n- h2 Z5 y8 u7 n' h9 u( p
#include <mach/mux.h>
7 s% C7 ^( G" Z/ w! p
3 |( N( ^% P1 Q/ m, I8 _#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 b# {0 g& I! g* E `2 a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); `# l6 h: t; ^1 ^( P& ^9 U: U
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" V: M) D& ^. W3 |: H! O0 F#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; b& V) R. j2 Z; V* X
/ p$ P, d! f) ]8 i; D/* assign the tl som board LED-GPIOs*/; C$ w/ M7 m7 I$ e
static const short da850_evm_tl_user_led_pins[] = {
8 s, o& l- v' |- ^. u! B /* These pins are definition at <mach/mux.h> file */
6 `! j5 { |; f) h) u. Y h DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 [2 O7 s7 y n" C; @9 e2 e -1: K- X9 s/ w; E; g7 k9 f2 S/ Y
};/ W: J% k4 m' K( C7 i; Y Y4 D+ A
' C& r. `+ B- ?
static struct gpio_led da850_evm_tl_leds[] = {
( z4 k9 n" ?( |+ D4 `5 \5 _ {
( k" d4 T2 c/ s/ D& o# a, p .active_low = 0,
% n; I; q# Y+ j9 Z* D .gpio = DA850_USER_LED0,
, T- o# q9 x6 A9 f% {7 \$ O, M .name = "user_led0",. e. Z1 @/ Z+ y- f# d- U4 e% H
.default_trigger = "default-on",) `- u# I: J( G; ?) k
},
- p2 e( [/ q/ s3 a {
* ~- v/ C/ S- d" } .active_low = 0,; T4 X( k" T- e7 [" q" S
.gpio = DA850_USER_LED1,6 P: {- ]% w( [
.name = "user_led1",
% @8 b. v5 P1 K7 F1 q7 c3 H& A; {* r3 r .default_trigger = "default-on",
7 h: c' b( d8 ?% f },2 P. q/ J S' r
{
. O+ z6 R- x s8 I .active_low = 0,8 [/ _/ w! r6 L5 G1 I7 t# i0 b3 m
.gpio = DA850_USER_LED2,3 m8 l8 I {' m
.name = "user_led2",2 Y/ D9 Y5 f- c% W
.default_trigger = "default-on",, ?0 E2 i$ N8 `
},4 s4 v6 o5 ~/ |, `5 Z" ~! y- m2 R6 K
{- B$ w0 ^4 B* N/ }
.active_low = 0,4 l- @: |! z2 q- `: u
.gpio = DA850_USER_LED3,
- n- S$ D | o2 L6 e .name = "user_led3",
5 D5 _/ P! @4 [0 p( h .default_trigger = "default-on",
. N) O7 u( L# s) d4 t },
" K+ k \" g+ r, z( _: T};: T: h" A4 j' X7 S* a
0 o/ d1 C: p/ `) ^" `; pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( Y: |8 o" W! Y/ o: X* y
.leds = da850_evm_tl_leds,( v- g7 v/ q" s! \: e
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 x1 c7 E8 p, v/ U9 `
};3 M, w; H b e2 Y
7 z0 v8 r' c; I9 }& [static void led_dev_release(struct device *dev)2 I, H) M P% Z' G @4 g
{
- L- ^9 R9 i; q, C/ c r};- k' X# x) ~( w$ k. y @
/ a4 y: M* \2 d8 @! K' y
static struct platform_device da850_evm_tl_leds_device = {
* k7 e8 c1 K# K) O+ W" a$ M .name = "leds-gpio",
+ ~% c/ j' J/ K& | .id = 1,
2 n% s. G, B0 m .dev = {, b/ `$ |7 x/ F0 _4 G7 N
.platform_data = &da850_evm_tl_leds_pdata,! u, c" T( H. F \/ g/ K& W
.release = led_dev_release,% |+ w; }/ T9 s6 l! E9 F# T; Z) Z$ f
}4 h0 A$ r: i/ }0 N
};8 J) Q, _$ f4 i! z4 o0 s
: ~* C2 L, U: q' Z# Xstatic int __init led_platform_init(void)
' A0 R) _. P {, c7 a0 m [! x8 x{
. g; J; @) Z3 ?/ g/ W1 g int ret;6 x V7 ]4 E1 n1 E% k% T
#if 0
' ~9 h, x1 ~* b4 N$ e3 v ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% A1 O/ n: [7 S1 l if (ret)
3 x6 w9 O7 f( {! j) q5 k) d( M6 { pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 K! y3 K; _9 k
"%d\n", ret);
2 q: w8 S, A; S [2 k' P! X#endif
, A. R. `) E8 M$ | ret = platform_device_register(&da850_evm_tl_leds_device);* s- a# t) `, }2 y
if (ret)
; m) |: _) n: \2 B pr_warning("Could not register som GPIO expander LEDS");
" N5 t* D; z3 y0 q else
0 \$ e8 y) F# ^2 Z' {+ I printk(KERN_INFO "LED register sucessful!\n");( U: ~' s/ P/ w. g* R, P
2 S& v" o2 R; P6 W# x8 Y
return ret;
) }& g* V5 ^* A4 p' H6 Q" r& `6 f}" X. o& f- A% n: _# q% G! V
+ f) \7 i# a7 \0 j; R5 q" x+ Z
static void __exit led_platform_exit(void): P. ]& C, ?" |4 o! X
{
' Z+ l8 f' Z1 z! J5 ~6 T platform_device_unregister(&da850_evm_tl_leds_device);4 I" @, k2 n2 E5 W' p
$ I0 h& [/ {2 w, r printk(KERN_INFO "LED unregister!\n");8 B7 O4 Q5 {6 p4 m
}
+ z8 s/ F+ ?0 i5 ~
' ^; |$ q8 l# e: ^module_init(led_platform_init);
% L; _5 U* s$ L0 X% z0 J1 L; qmodule_exit(led_platform_exit);
; W) j& \$ e, i. O( b5 S0 @- N% r' H) s5 W
MODULE_DESCRIPTION("Led platform driver");
, l5 p5 m. @2 w8 r" u0 o% wMODULE_AUTHOR("Tronlong");) A& X9 v1 _5 w9 Y- [0 n
MODULE_LICENSE("GPL");
! v: u' G: W1 v: X% c- Y4 r3 F3 }1 g
|
|