|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ r- S5 m( Z# x( z
#include <linux/init.h>- a7 L [2 W9 q4 c1 C' k
#include <linux/module.h>
6 v! ?3 a% F5 f' `, d' Q0 C# N#include <linux/kernel.h>2 m7 A& M4 W+ W# h( W
#include <linux/types.h>! u# }3 y5 H$ h" R
#include <linux/gpio.h>
* X7 v9 x3 i/ n( C#include <linux/leds.h>0 Q' x- {+ s% e$ K7 {
#include <linux/platform_device.h>
3 M* R4 G1 \! J! F" V. J7 d' g# {) ?7 }, B- M2 Z8 F6 L9 V7 m5 L
#include <asm/mach-types.h>3 o' n* N0 N3 P {, u
#include <asm/mach/arch.h>
8 D9 U) M# K* Q6 ?5 L/ Y, a#include <mach/da8xx.h>! Z; e* X7 f1 [4 a# {
#include <mach/mux.h>
" H' a+ `- c3 H5 a$ D3 z6 U8 O: B1 l; N5 Z- e6 s% `. G
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 q2 r( h! y; }; I#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" e( ^: }3 d7 o#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) y' Z4 o& {/ F( ^4 A w, a+ `) y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% p/ k- k) I, e- h0 {
}. N1 o9 w0 d7 Q7 M" F1 `/* assign the tl som board LED-GPIOs*/8 ^# }% G/ h: Q8 Z# p
static const short da850_evm_tl_user_led_pins[] = {
* c0 U7 w. ^; Y8 r4 [/ F /* These pins are definition at <mach/mux.h> file */
7 |5 X3 G7 d0 {: C9 u DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 Y% q, n; n! Q) m
-1
# ^3 a/ R2 u6 [* o};
! j! r+ A; [4 E ?/ F1 N z' N
) |$ }+ n7 _; R$ Cstatic struct gpio_led da850_evm_tl_leds[] = {5 r( q7 e) l/ R- C b% Q) r
{+ Y ^ T+ Q) o. b. y
.active_low = 0,: ]! i# M% X% L4 R
.gpio = DA850_USER_LED0,
6 s9 }% c/ Y' I, ]( p .name = "user_led0",0 u+ T, O, m% w/ p, a$ m K
.default_trigger = "default-on",
- Y5 ^ j4 h- I# N" n7 l0 r },
% K+ P/ a0 P% ^( o- v; K( }1 j* c {
1 |# T; v; H3 D5 l# ^# F5 g/ \" k4 u+ I( r .active_low = 0,
+ J) s- _/ R1 s" ` .gpio = DA850_USER_LED1,
( R$ }- z0 I. b& K# e .name = "user_led1",/ T7 d& R; r4 ]; N" y
.default_trigger = "default-on",+ H: J, C( x# u' `9 z4 {
},
9 Z! @! p) p/ Y- T W {
" `+ ?/ {1 T8 O0 w) | .active_low = 0,
1 c, f( L) t( z; o9 j3 ? .gpio = DA850_USER_LED2,
, q+ }0 m+ M+ A4 r .name = "user_led2",$ R: m/ b! ?) j4 b6 S* T
.default_trigger = "default-on",
+ U1 k5 d. K7 N g9 \/ f+ f3 C },. U% h! F& V& k {% W$ V
{
( C+ a/ @) P5 ^0 F1 ^* g( z .active_low = 0,/ A) e& E. h6 x- b* v. f
.gpio = DA850_USER_LED3,
6 L7 E) O! |1 x .name = "user_led3",
; A' u9 _9 _- [+ g .default_trigger = "default-on",
2 m( p r; M+ @* q# f- W, S },
" x& ^) \: H2 g; [" H' l9 o$ A d3 J};
! ?2 Y" g: i- l- j7 Z+ W; R* W2 S3 }! V" K4 a
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' `6 B& ^% z8 m: N r' f" k" S0 |1 H9 T
.leds = da850_evm_tl_leds,
6 l1 t2 ^0 R1 p6 |$ N .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; }. K2 ?8 m4 o) D3 X& G
};
' g7 s8 ]8 }7 k, x# Y9 V6 [" ]9 n/ R! U1 \3 V
static void led_dev_release(struct device *dev)2 X! i* N1 p5 c0 A* P& K" y# e
{
" X. S8 q8 Z( a# F1 J7 d- Q1 ]};& W$ O, u# U1 i4 \
" R `! i' V1 p5 o/ o0 \) S
static struct platform_device da850_evm_tl_leds_device = {
0 Z; ]3 R: d, f. E. I+ {3 D3 M2 A .name = "leds-gpio",* U' [: U$ e% w% f
.id = 1,- g5 N7 D4 w* G# O$ F& A
.dev = {
1 Z$ j9 j! r4 X7 w; p .platform_data = &da850_evm_tl_leds_pdata,
% S0 g3 y% Z/ b% e1 h9 [ .release = led_dev_release,
! M1 ~8 M" ]! j# t6 | }! \8 K- F2 _8 P& z6 g
};+ _) e. Z M! @6 y
\2 L9 s0 C \# S7 [4 p, p
static int __init led_platform_init(void)" v6 D" K a% Y7 O
{# D3 \8 g1 u3 C f) ]) f7 [% `
int ret;
: Q) u) g' V/ Y! h+ o) N#if 03 C# w& ?; c( g% |6 Z# p4 p
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 r; n' R$ `; p: E( X+ L& [8 s& B
if (ret)
/ I" o% r3 d# w$ W+ e pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, O' S+ B0 Z- j "%d\n", ret);
) ^' _. s& G) p7 d, ^+ d& `#endif5 L( i/ r# m1 `4 q7 _
ret = platform_device_register(&da850_evm_tl_leds_device);
a0 j9 [9 g- k& }- u if (ret)' g0 E6 l5 r5 v, P
pr_warning("Could not register som GPIO expander LEDS");
% ?/ x3 c8 F2 p2 p else" u* O" U) y$ U1 c1 W
printk(KERN_INFO "LED register sucessful!\n");8 e& }$ c0 I T4 Z0 m/ c
$ N; t, |6 j! U' q! a
return ret;
5 Y! [/ I% B$ v: S# \}
6 B( A) y, ^ T s; O# ^9 c6 V- f' N
static void __exit led_platform_exit(void)
+ V) v8 A" g& t5 v! O4 T3 Y0 _{
# Z; \, X- `+ {& I2 F platform_device_unregister(&da850_evm_tl_leds_device);
3 ?4 G# k {) V* W! L
* W# R5 |$ o ~+ J printk(KERN_INFO "LED unregister!\n");! x: a4 p6 S4 C7 H! g
}& J( ]4 Y, P4 N, j
( y& @' g2 F. A V
module_init(led_platform_init);$ g& J% I9 m4 f8 }, L
module_exit(led_platform_exit);# X1 N5 O' i1 L
7 o+ U/ j5 \0 @
MODULE_DESCRIPTION("Led platform driver");8 l$ g3 @0 ~% P& D5 W
MODULE_AUTHOR("Tronlong");
0 u2 l& N' ?8 EMODULE_LICENSE("GPL");
0 R; V$ G: w" N: a5 b6 }: t5 X% b1 g# c/ w$ A: _
|
|