|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 { X2 x0 y# {8 t$ D+ c& O& h
#include <linux/init.h>
- X9 ~# Z) ~+ f#include <linux/module.h>
6 z$ j% f% H. }" L) {9 |. @9 P#include <linux/kernel.h>
! N, J, n5 }5 `" ]' f5 P8 a4 f#include <linux/types.h>, s# K1 y! v% T
#include <linux/gpio.h>5 O4 O4 }+ T$ b3 N+ m/ l# U9 g+ }2 X
#include <linux/leds.h>. W9 g, s" Q! [( o$ c
#include <linux/platform_device.h>
) b6 Z# ]. m2 s: B/ n3 ?
) e; F8 C8 Q" ~ i7 n0 h h#include <asm/mach-types.h>
. O& O1 C" }; C4 U/ f0 C#include <asm/mach/arch.h>
1 O4 ~6 z1 r/ A#include <mach/da8xx.h>
s' D+ A/ C2 V! ~. O#include <mach/mux.h>) \7 H" S( m( y/ D2 F
# W! K7 _% M4 [: p
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 r5 s* K2 T2 g* s, T
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) X' ~% C w4 O2 A$ U; c#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& W+ y- ?$ n% Z" ?% o8 j#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 @- i% b' I0 `) Z3 l% Y2 l3 ?
8 h* }8 t; [' h/ Q ^$ @3 J/* assign the tl som board LED-GPIOs*/
% J- Z/ t- O) B* p% y3 \( Dstatic const short da850_evm_tl_user_led_pins[] = {
O: Z+ u! f3 {+ h" b* i /* These pins are definition at <mach/mux.h> file */
; _, V0 I5 z' P+ x: E& X5 f DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 O8 |% ~( S8 `
-1
" D$ z7 \ O" I. ?6 |* h( d! [};
& u6 M# }! _2 r1 E6 r
1 F$ } j f( b; q6 x) o2 istatic struct gpio_led da850_evm_tl_leds[] = {
: F" G' I; K7 m* D {3 s9 @- m, K1 E! g$ p+ r; B, [
.active_low = 0,9 P9 C$ q) N& ?2 W0 H
.gpio = DA850_USER_LED0,
- k- @! x$ D2 a7 f, L' a .name = "user_led0",
6 t M8 T' a3 }% f5 R3 [0 q .default_trigger = "default-on",: r- h& x1 |- w, @6 u( F
}," b3 H1 T- A# O4 D. x6 l8 ]
{
4 s3 k( n3 K& o2 A% H1 H- Y) z .active_low = 0,# A1 t* j7 p* N
.gpio = DA850_USER_LED1,. {/ f+ K, Q& T. g6 k9 c( r
.name = "user_led1"," F# \# l1 }* i" z3 E
.default_trigger = "default-on",
. A2 D, ]5 d! }& x3 n1 l4 b },
6 c% o/ E; I) O I8 u$ _5 }: k5 S {, V8 }4 o( J5 q) O
.active_low = 0,5 @. Q3 W0 Z/ t* t5 G: P
.gpio = DA850_USER_LED2,# z, [3 M- M9 L$ K% B8 R& U# T8 S
.name = "user_led2",
7 P/ {. l: }- s/ g8 I/ u1 ` .default_trigger = "default-on",; E9 f U9 x; O/ [
},
* c0 e4 T# X, ~. J {4 B9 ~6 `; ?1 n6 R
.active_low = 0,; B# e5 b: @0 `% A% I4 j: G) z4 b
.gpio = DA850_USER_LED3,1 q8 `1 Q: M1 R S1 m
.name = "user_led3",$ D) a$ L1 P, B4 y8 J
.default_trigger = "default-on",, e+ j! t& W/ Y" m; P& p6 n
},
! _9 ]) W1 W6 R};
; }9 l5 z9 X6 ?6 w+ E0 b6 y5 }' z7 L7 p7 K3 R, _
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! {! t9 r3 a4 O: ~) q .leds = da850_evm_tl_leds,. j" a" b) n5 {2 o4 t' c" o0 i0 m
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 L# x; c5 `/ a}; `( ^6 k2 n% @$ z$ v7 ?
" w3 [0 e6 y$ W- k. Ystatic void led_dev_release(struct device *dev) M. l; ^+ p& P2 o1 T
{
u* u( M3 d9 K5 `0 \; V% u* i};9 K2 I# J. c. ^. {: e
% e: E7 n; b3 {6 p/ Y7 k+ ?static struct platform_device da850_evm_tl_leds_device = {
, {* z$ m; `4 q9 F. q* | .name = "leds-gpio",7 c* r8 C% {; ]; p+ c1 a
.id = 1,# I4 Q' e& k$ g; B& l, ^4 n
.dev = {+ T; I9 A" N$ ^' {; C8 T
.platform_data = &da850_evm_tl_leds_pdata,
3 v' M2 U" _- T .release = led_dev_release,% ~1 R$ s/ L; q$ N. g7 V- L8 V
}
$ A* i/ W" U3 ?6 g: J% V( _};
4 S8 R1 B# K$ T4 ^& T# Z9 P6 s4 s8 Y# D
static int __init led_platform_init(void)
s6 }+ c' v% N* F{
! I. Z- s' @$ I1 D0 D1 c int ret;; Z( i7 g9 X) b+ k; k( U- S' W+ K
#if 0" w7 m9 j; Y& u% B
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 c( e, ]( _1 K; d8 Y3 z( k if (ret)
, F& z& `2 Y4 o2 ^' P pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 K9 X: K5 i% A# L& x/ ]6 c "%d\n", ret);
& r: y2 M; r1 k5 r/ q#endif$ z; a! L4 ]. ]( P: P7 e
ret = platform_device_register(&da850_evm_tl_leds_device);
- H& E1 r+ T6 H, A3 ] if (ret), ^0 ]# R/ n- c6 A; ^0 B8 M1 a' W
pr_warning("Could not register som GPIO expander LEDS");
# a+ Q5 p: |" d7 v0 @ else
, t1 t. w9 V4 ]/ N5 p' P printk(KERN_INFO "LED register sucessful!\n");& R! `3 i# p# m7 R9 H
5 U' h2 ^% s; B) |4 X; a
return ret;
' Y6 D: S# w) t5 ~" c! i2 F}1 N' U4 ~4 c3 N2 z
& }* Q. w5 N3 S7 l+ H0 d. mstatic void __exit led_platform_exit(void)- ~- i) _; C* p7 ~
{/ X3 _2 r" U# c, }$ ?3 O5 N
platform_device_unregister(&da850_evm_tl_leds_device);
$ _9 ~" _# y: N/ w; ^* H6 g4 I
- q, ~' v, I1 s! X printk(KERN_INFO "LED unregister!\n");
& E% L1 ~: w6 H$ l! F}4 p# B+ c; \) `: x* E6 V
& l7 o0 H# \& _1 ^1 Q6 W8 ^module_init(led_platform_init);
. y/ H! Q$ \3 W8 F; [( R) p, z; Vmodule_exit(led_platform_exit);
, a# ?$ c2 v0 b3 t u5 \
2 o2 A& |0 l, F2 g% C9 z# SMODULE_DESCRIPTION("Led platform driver");) U1 w6 u( X9 S' N* \8 U7 f- E1 ~0 T
MODULE_AUTHOR("Tronlong");
+ _; s, X! T. SMODULE_LICENSE("GPL");0 O: Z/ j$ D- `1 {, F: o3 N! l" ~
, R$ l4 ?0 r8 ?" I |; D% ] |
|