|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( G: i# w- A* Q! e
#include <linux/init.h>. n9 R! I/ a. l: x* N
#include <linux/module.h>) ^/ p& t# y0 ~
#include <linux/kernel.h>
3 V: W" P1 R9 l4 \( y1 B+ Q& Q#include <linux/types.h>
4 U1 c( e7 Y1 \! M0 f#include <linux/gpio.h>
8 a, P0 N' c9 w5 b#include <linux/leds.h>! ?7 [" k |/ ^- k
#include <linux/platform_device.h>% n+ F2 d) e% ^; L I E1 H
; s+ M, ]9 ?" Z$ A- j#include <asm/mach-types.h>9 S6 R) F6 _0 f
#include <asm/mach/arch.h>9 ?. \' q' Q" Z( @) A: \- C2 C" i8 v# e4 y
#include <mach/da8xx.h>
. w- U- q5 ^) W#include <mach/mux.h>
' i/ A& }2 [* w0 G: x* R/ f. w8 k& _! i7 m
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' @3 v B2 ~/ j4 g6 V#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)# y- h+ ]3 y% N1 m1 j
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 G4 A, A- J/ I0 t) T
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# |! o7 S& b9 S$ u! z& o _* n5 D' a( I/ x9 f
/* assign the tl som board LED-GPIOs*/, k% @7 u6 k$ V( _0 w* T
static const short da850_evm_tl_user_led_pins[] = {
5 K5 ^( F% C! |4 W /* These pins are definition at <mach/mux.h> file */% {* v) T9 i! W, P( C- [
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,6 x6 ^: T( J2 [) s: B
-1
1 P* T# j" N ^$ K* f};% d6 E/ i5 a9 O1 k' g
9 [4 d. O9 ?5 _
static struct gpio_led da850_evm_tl_leds[] = {
0 _, x4 G# l) ^% Y& `" o1 [ {$ d+ }4 W7 Q9 H) Q( ]2 r
.active_low = 0,
5 w% E% p. f5 T5 j4 R .gpio = DA850_USER_LED0,
" q6 i) a8 b4 e; Z+ w/ X .name = "user_led0"," d1 d. L9 i; @$ \: ^1 s: N
.default_trigger = "default-on",. K4 _0 L" _& C8 X5 K1 Q3 g1 W
},) ?; L: p7 p: q: B' n
{( r; c# D! q8 K4 j! n$ X
.active_low = 0,9 n3 U) A5 `/ }) m; _8 `
.gpio = DA850_USER_LED1,
! D8 @! N* O, l$ {( ] .name = "user_led1",7 z$ @' Y' N* u. \4 A2 X
.default_trigger = "default-on",
8 i( P' w; G5 m8 F1 b; s0 W9 i$ v. n( ? },7 ]/ J7 y5 I# ?4 j( G0 e
{
& y. @+ z! k7 R .active_low = 0,- `3 Q# Y2 d2 x' \, m G
.gpio = DA850_USER_LED2,
7 l; s z3 n+ Q, K .name = "user_led2"," I; Y5 O! X% P2 p$ G/ x- e1 H' w
.default_trigger = "default-on",
0 V# {; K6 G+ c& F },
% S+ {( E) p! \6 j! j7 a! r1 `8 { {0 v5 r. G1 _! h
.active_low = 0,
3 p4 ?9 D6 ~' o' o5 S$ S+ M/ z N% V .gpio = DA850_USER_LED3,
) `; }2 J3 N# O* D- e .name = "user_led3",/ N! X& C E7 t5 k7 O4 E
.default_trigger = "default-on",
9 G' D$ }6 K' o },9 Z7 G3 B, v, K: d- c5 K; }, h- z
};
2 _5 m% `9 |. R2 D* Q* b: ~; U% i9 y: \
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. @+ r3 S* | P: [' o .leds = da850_evm_tl_leds,
3 F0 S3 q: M) s3 G4 h, @( g3 g .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 s& O4 Z( U5 s- l: l0 D};
9 ~4 ^) w* @8 ?
, C2 J+ M9 {9 K2 a% Q% g8 V. nstatic void led_dev_release(struct device *dev)
D7 d" H ^7 C{
% Z ]7 G2 M7 v' Z( _3 l2 h9 W5 u};) a/ A8 S* p4 F+ A
9 X2 S3 b5 I# U" w$ J7 ^static struct platform_device da850_evm_tl_leds_device = {) h- F8 {* y; |; H# R: U
.name = "leds-gpio",$ u( q* }* X* s1 }2 D' U9 k
.id = 1,
+ q9 H3 d6 p8 m .dev = {; ^- @& @% T2 K0 z5 {" y
.platform_data = &da850_evm_tl_leds_pdata,
' y: m& c1 \/ l7 s! @ .release = led_dev_release,
4 f: q# _3 n k1 j5 a( c }
! H, h- X$ E! r, w5 R6 Z};& F5 }/ D: }4 r5 L/ H4 ^
. n, @! f+ I9 {7 G- D* h$ ?8 Ostatic int __init led_platform_init(void)8 @5 X% S; Z: e. s7 |0 R
{
. v# P, z+ H% G/ X- U/ D4 ` int ret;2 Q9 z% ` I5 @$ }5 Z0 D% \
#if 0
+ I) T8 k) o% H- z! w ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; x+ a5 S1 D. m$ } k5 y9 Y
if (ret)
( d! r8 |& S+ b8 a! [& I pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 z0 b4 l, w- ~
"%d\n", ret);
6 ?/ F; j! z' O#endif! A. S, {* p7 f3 Z! Y" I1 t) [
ret = platform_device_register(&da850_evm_tl_leds_device);" R/ ~$ G1 ^( N5 j2 K
if (ret)# L# x4 O8 _% b* R3 U' m
pr_warning("Could not register som GPIO expander LEDS");+ V4 h2 o5 z' I& v! A. q. P$ j4 ^
else
/ ] S; @$ t R& p. g- j printk(KERN_INFO "LED register sucessful!\n");
. v5 Z" z$ X1 a% R0 g# L& @) V1 A, N
# i. D, k& ^. D- R return ret;
# |6 @. K$ [1 u- @$ k}6 [/ M1 ?( J/ ~+ o% u5 p
" B7 s; t# F, ^# p+ Sstatic void __exit led_platform_exit(void)
2 X7 k4 _9 ^' {# w# P4 `" d{$ x) X3 h: \3 n
platform_device_unregister(&da850_evm_tl_leds_device);- F, z! _$ I! O1 ^
0 \) |/ u$ Z* p; y# _' ?+ y, Z printk(KERN_INFO "LED unregister!\n");3 k! q: z! b# [/ |
}" }- k9 D2 f/ X/ `/ q8 r0 l4 y& m
0 o- P: {* u% _# I! W z
module_init(led_platform_init);
. v9 ?7 H3 |( p) Kmodule_exit(led_platform_exit);
4 E H/ d, _( r, V8 J4 L8 s9 S& o3 c3 Z! N! u
MODULE_DESCRIPTION("Led platform driver");! I9 A& V* M W$ ~5 h
MODULE_AUTHOR("Tronlong");
: U; n( J( ]9 M1 a- UMODULE_LICENSE("GPL");
* [- ^4 p* j5 R3 K R
$ J$ z- ]8 x; q+ m' f( C$ E |
|