|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: i3 D- x$ K1 K: i- W
#include <linux/init.h>
7 y7 Y! m7 r" c0 c4 P5 e% p#include <linux/module.h># G* a3 U! M3 I' @( p7 C- |
#include <linux/kernel.h>
4 |1 E+ B# j* r6 t8 P#include <linux/types.h>
! q$ {# E$ K6 o) n+ J#include <linux/gpio.h>: @. A( p- [( D* o1 @1 P1 p, z
#include <linux/leds.h>
- y# @% k5 f$ q0 L* e" i( ^, w% J#include <linux/platform_device.h>
1 U( Y+ r8 p" L: a" Z7 T& |" D( W, b- Y2 C
#include <asm/mach-types.h>
. t- {5 d" t: [& m/ p#include <asm/mach/arch.h>6 }6 ^9 M# X+ Y/ @0 G: S
#include <mach/da8xx.h>
: q8 g/ `9 P: J4 [% v#include <mach/mux.h>
, c3 G8 ]8 j5 P. f ^1 o4 Q! P1 u* p6 f L/ ]' Q8 j
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 l9 r, s8 L, V9 v, K D#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( O1 S' \" i: M- }+ K* i. I
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 y7 j' M4 m. y' h4 k
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" w; d* `$ J$ M, N% p
' E( r+ D4 H d+ ?+ u# h8 D
/* assign the tl som board LED-GPIOs*/
3 l/ ~/ t2 W2 E! I1 estatic const short da850_evm_tl_user_led_pins[] = {
' h3 K/ [/ P6 x0 H# K) I /* These pins are definition at <mach/mux.h> file */* E% Z$ _+ H; L) @- {" I
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 [0 v. M. h I; c& Q" }2 a
-1
- |7 C0 F+ f7 d! j, D# R};
. L& K. W, F! h R+ D* u* c
' N2 | h# I# k/ |3 `, Dstatic struct gpio_led da850_evm_tl_leds[] = {! C% C7 X H6 d8 { [4 M+ |
{
& B5 b8 @8 j5 |; r: n .active_low = 0,' S) _: G% h* A0 e
.gpio = DA850_USER_LED0,
! `) |# D5 v7 n g( g .name = "user_led0",: X/ F A& v- C# u0 P0 b: o
.default_trigger = "default-on",. V6 x6 v$ M/ k: j
},
, A) Z4 V- M+ y ^- B* M" r, c {
/ \% l2 h/ F0 X& K( X! h .active_low = 0,2 A6 A2 b% X! P' p/ D
.gpio = DA850_USER_LED1,
: V9 C& @) e; A$ D; r) x .name = "user_led1",& k6 g7 b! W: M1 l6 L9 {- L, ]+ A
.default_trigger = "default-on",8 J1 j' y- k# A
}, Q$ u$ z0 k+ e: B) `, u
{
0 G& ` i9 ^, @ .active_low = 0,
) |) i# E: p# I0 H- q* B4 d l .gpio = DA850_USER_LED2,
4 e, q; X; p$ _& v .name = "user_led2",6 s# m) ]) J+ _' w, D
.default_trigger = "default-on",6 m) b- |6 ^: k
},
* I4 B1 A8 z1 E( {; K {7 j, ~1 U) w' u8 _! K8 L
.active_low = 0,
. |3 P, {0 m. B; D& | .gpio = DA850_USER_LED3,
" A; D4 S- P! f6 ^ .name = "user_led3",- }4 n* R. x$ u& O1 E
.default_trigger = "default-on",0 d9 B% l: w/ b4 @0 J# o4 r
},
A& d7 Y v1 S4 R* N( L4 p% j# }};
2 E/ t0 i. j G: p! v& u p5 \9 q4 T! _+ m
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. W! z- Q: Z( F9 l, x0 F
.leds = da850_evm_tl_leds,! a+ U4 S4 }. Q" U% x0 X# l+ Q, |3 ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 w4 ]2 G! B( a9 T" J
};
( Z/ w: r+ x* \8 u
+ H2 ~% c& ?2 F- R. Ystatic void led_dev_release(struct device *dev). [# Y* E* s( t) ]2 Z1 H
{! N. P, |" X: `$ g. k3 @
};
1 B3 \) Z [% j* E% m/ H0 I6 N7 G
6 D* Q7 K! j7 T) wstatic struct platform_device da850_evm_tl_leds_device = {
9 k% Q, d3 L, i% {2 B% U .name = "leds-gpio",% s6 c5 D$ z" [) D; j. ]
.id = 1,8 Q. T6 O( |, n/ {3 {, h
.dev = {
' l7 h8 E: m" z5 Z8 v2 ~ .platform_data = &da850_evm_tl_leds_pdata,! r9 k% \& t" @0 ^9 x5 ^
.release = led_dev_release,
, t& s! F0 l) V8 N }& M5 b5 k* {, ^3 X3 H/ d# V
};
4 _; J9 a9 Z3 |4 m, M. [ v8 |# K' u. h+ `7 ^$ L! _3 K) |) E
static int __init led_platform_init(void)
1 ~. V7 j @4 S9 a b( G{" ~& D, q9 x$ O; g
int ret;$ X) X0 U% t6 e! ?3 F! n `: m: Q8 X
#if 0
+ v( t( y' p7 a r0 ]1 x- G( X ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
6 j; i# C( w/ j8 ^/ S. ]5 T if (ret) H& L) V8 ^7 t7 S" q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% ~2 T% v* L: G/ R& |2 O
"%d\n", ret);$ o3 g( ?& u( u) _0 R6 D
#endif
) c% r6 H: j9 o: [ ret = platform_device_register(&da850_evm_tl_leds_device);
& }6 Y1 h! {3 U4 }' p( I' E if (ret): E$ d; |* |; N `8 I0 b q6 }7 s
pr_warning("Could not register som GPIO expander LEDS");9 W1 ^4 Z" A" N/ `" l
else
- F; Z* L9 Z* X% M$ c printk(KERN_INFO "LED register sucessful!\n");% e1 ~ }! p( j" T) v7 N
* i) m* ]7 z9 h0 { C$ R* ` return ret;
5 w) Z$ G7 d7 h k. G}
+ m6 B& C, J( R9 ]5 X) `9 p5 b# H. f q7 C$ ~3 [: B
static void __exit led_platform_exit(void)
6 ?- K7 { X5 c9 J{
! Q$ e* z) y! h9 O! k platform_device_unregister(&da850_evm_tl_leds_device);
5 \/ v$ y5 n7 B0 N4 f
/ [5 C! }: }* v" l# Z7 m printk(KERN_INFO "LED unregister!\n");
7 J# P- d$ p6 w; ]}
* g" F9 U, V/ y6 U' a8 D) \& [: h( }8 g% `
module_init(led_platform_init);3 e9 O: d2 u7 p V
module_exit(led_platform_exit);
a' |" I1 J; L7 F1 [$ f& X6 k' {3 Z, \9 v: Y
MODULE_DESCRIPTION("Led platform driver");
* ?" N: D" a' Y6 QMODULE_AUTHOR("Tronlong");
B$ ]2 Y. j; {6 ]( N9 ]MODULE_LICENSE("GPL");- a. v- R9 O8 {
3 ~1 E. A x, B5 |) ]
|
|