|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 b& p. Z6 f/ H3 o" q: f
#include <linux/init.h>4 r4 ~! u# ]' K( C5 \
#include <linux/module.h>7 c. c1 j9 W% ~2 l1 ]5 y9 M
#include <linux/kernel.h>
/ [$ L9 T: N x1 N; p#include <linux/types.h>
& r) s' `! z2 D9 c, S8 L. s3 \#include <linux/gpio.h>( [& K7 T7 N. S0 }' A+ @8 i3 `+ u1 T
#include <linux/leds.h>6 @# r. i% J9 u
#include <linux/platform_device.h>
1 O0 i6 ]' P6 q4 N) }/ |
J J( ]# k0 n6 X# H#include <asm/mach-types.h>0 n8 L% g& j/ y7 `. u* y0 |$ K
#include <asm/mach/arch.h>
1 G% X3 y: v9 K& M2 y9 B% h; G#include <mach/da8xx.h># w9 R9 g" u' Y+ M
#include <mach/mux.h>' P' A$ N" P: Y" X
% S8 e6 _3 I) y p; V) j W: }; U2 n#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& Q, z; z7 O2 T8 X" A( z, F
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: s2 ]+ {# A- W* K' _4 U#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 `* Z# x9 h. E* ?#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 j: ^ |2 F* Z/ ]
$ E6 o+ |0 m, l. r, l! V/* assign the tl som board LED-GPIOs*/
2 m' U; X9 j: a, vstatic const short da850_evm_tl_user_led_pins[] = {
$ }* q" { Z/ T/ i /* These pins are definition at <mach/mux.h> file */
N8 Z8 V5 ~' J) ^ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 E7 X& @. D7 v( i
-1, f) T( X* Y, R% Z
};1 i$ d, z# M9 R; l8 L/ x
1 P& X1 L2 x4 n, n$ e, ~" ?
static struct gpio_led da850_evm_tl_leds[] = {
- k1 D h% a% | S9 X* ^/ W8 R9 Y {
" ]/ B9 L7 q9 K8 l. y- y .active_low = 0,2 y# c1 Z# d, Z6 [+ q' N
.gpio = DA850_USER_LED0,) g3 y* j0 e" I7 {4 O/ ]5 j
.name = "user_led0",: U4 X/ P- I5 A- p7 H& `5 h
.default_trigger = "default-on",
5 h. |3 u) K+ e },
1 U! {1 P# r& A& O4 `" k {. g. v% Q7 i3 p; y5 E. P/ w+ F
.active_low = 0,
7 b. ^: C' S- Z3 ~/ @2 h8 u .gpio = DA850_USER_LED1,
: Y9 g3 n8 v9 {9 y .name = "user_led1",
' ], K7 Y' T0 |! _' v1 n$ X3 w3 B .default_trigger = "default-on",* h* l; F' l _! r6 d- J; u
},
4 M( E S! S* M5 @( ], ~ {
8 V# w1 X% k/ F0 \- a- J1 w .active_low = 0,
8 g* r9 t* K8 ~ B) b3 ~; O, _5 X* @ .gpio = DA850_USER_LED2,
4 O( l% ?$ ]7 v2 u/ R. k .name = "user_led2",
Y( o+ \# [6 r) C- P6 P* s .default_trigger = "default-on",
# k2 m$ |/ t/ B9 V2 [ },: d% B' L8 o. G; A8 u' Z( _! Z: z
{
( p" z8 W! f* O2 C7 H1 L( X$ a0 h .active_low = 0,
& U. k' E* m1 Z' G8 D .gpio = DA850_USER_LED3,. G- W& o/ F' @* r6 s3 O: H
.name = "user_led3",
+ t2 s# E& `6 E) d" j* o" k( W9 [ .default_trigger = "default-on",! a1 ]( ~8 r5 j7 X g& z! e6 w
},8 Z2 z$ o9 O4 u* m' o* ^
};
& P# ]5 x. R3 n0 ^' P5 X2 C7 C
9 g4 {5 F+ r3 c9 |static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 T, \! G/ ?- l L2 j) ` .leds = da850_evm_tl_leds,9 f$ x1 u7 Y6 o- O
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),( [. w0 r7 G! @3 j; S: ~
};4 m6 ]! T. z2 l/ P4 P
- D7 B) r! w. x
static void led_dev_release(struct device *dev)
5 t- s& x) V0 w- Z{* a6 R2 e- }1 T. U
};
! Z! Y& H. V7 L+ }9 L. J! ^6 B$ i. A/ I3 A4 z% o+ I/ Y
static struct platform_device da850_evm_tl_leds_device = {9 ?9 D9 g( N5 Z5 H. k7 V
.name = "leds-gpio",- t' @3 D# M) v5 `
.id = 1,
& K* ]& d* z% \3 _ .dev = {- p% P% a: R5 j9 ]- R1 Q, ^
.platform_data = &da850_evm_tl_leds_pdata,
4 ^9 A6 m1 T, H/ f .release = led_dev_release, u% s; E; B8 t* f3 ~
}: |5 g" A% ]* o; w" }; N3 O
};
+ }5 f6 N6 X8 A
# t! k; H2 N8 k$ x; R M' xstatic int __init led_platform_init(void)
% e6 c! C, [3 q$ ]: F) {/ ~{
/ T% V( x3 R$ ] int ret;; t" R: K) z* v* k2 e
#if 0+ T5 J% g. k( W9 ?! r" b9 [
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' F& s0 x$ p9 u0 f( A1 V5 j+ M+ _2 k) X
if (ret)
4 d% Q8 T2 }4 c; S: i# ? pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 ]! O* Z' F7 d+ r; y7 ]/ q9 z
"%d\n", ret);; w+ c9 D9 g3 r2 B) d/ X
#endif
8 F( u4 c0 `+ y& I' ]+ f- g3 C9 k ret = platform_device_register(&da850_evm_tl_leds_device);6 {! t9 u8 B" ?5 m% A
if (ret)- ~) D3 t$ T" a1 F/ p. N: _# S
pr_warning("Could not register som GPIO expander LEDS");) ^8 f) W/ Q, [3 n- Q; C, j3 v
else
% G* |* c% T+ S0 Y4 P printk(KERN_INFO "LED register sucessful!\n");
7 {6 O9 X5 F- `/ i+ |: p4 U
1 N# c$ a6 K+ j. J i) ?8 q return ret;" j f9 |9 p5 P4 @3 a+ Z8 u. a
}& b' a/ U( T, _4 u. [
, A9 h& U" C# ]% Z4 T; u
static void __exit led_platform_exit(void)& K8 _6 _3 H( `0 h; z G) z
{
4 z5 M, Q6 M' a5 U6 j# s6 x platform_device_unregister(&da850_evm_tl_leds_device);
0 D0 {% E/ z5 Y( j+ j
# H& M) p" f) R9 `4 p printk(KERN_INFO "LED unregister!\n");
E- r& @' _& F) Q) t}% W' \0 n7 z# x/ t8 Q1 m# l
% {# P2 i- |6 h1 m2 m
module_init(led_platform_init);3 |8 u& F8 @9 R8 |, ~
module_exit(led_platform_exit);$ _9 t2 K; l$ f4 H0 z7 E( x
1 k0 Y; f+ Y9 { E2 f/ s( c8 OMODULE_DESCRIPTION("Led platform driver");
6 }5 J L4 a4 |# IMODULE_AUTHOR("Tronlong");
1 v* N# f( K3 Z" \- D, F5 JMODULE_LICENSE("GPL");
% C( |. T+ L4 T/ h8 q; O* g' N: h6 a3 v+ d4 l( ~, [$ N
|
|