|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 K: N5 ^" W' A" [0 ^& Q#include <linux/init.h>
5 c; @% F' j5 o. N3 E#include <linux/module.h>- N. u/ k6 Q) a& t9 r/ x1 K, C
#include <linux/kernel.h>
4 h7 W9 U2 _ C! p2 P& W3 |& U#include <linux/types.h>! ]* G# }" _$ S1 n) d8 o& u
#include <linux/gpio.h>
% d8 q7 [5 `1 S |1 h#include <linux/leds.h>
4 l) x$ C9 p$ b#include <linux/platform_device.h>
$ m9 Y6 R' |1 {/ {8 h
! E, p4 w! ?8 `2 q3 k#include <asm/mach-types.h>+ h+ R4 w% T- a, X* v6 q7 l% x
#include <asm/mach/arch.h>: i/ i# [, `+ u4 U, v! f& n
#include <mach/da8xx.h>( ^! v. `6 E: u* a* ~$ k: q# i
#include <mach/mux.h>3 k+ u8 _7 ?" \) g" ?1 B
- t; P( @+ l& o#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; I0 [3 n( @9 _. K; n( E8 ~4 H#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% j4 z! u8 N; b: {! |, Y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" I. ~ ~$ I/ N0 t/ t: H% i#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ L; ]: C/ W2 ^( l7 Y9 {* }8 f
! N3 b, H) l7 C1 t2 D: W- z Q9 B/* assign the tl som board LED-GPIOs*/
$ [' M( J# T- V0 \7 h+ ~3 X& Ystatic const short da850_evm_tl_user_led_pins[] = {0 _- r# K1 u! B2 M0 R
/* These pins are definition at <mach/mux.h> file */) j4 S; `$ ?+ M7 ], b" B& x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! q! W% z! O5 O' P e7 @
-1
: n6 V6 v; a- {% J9 o ^: U8 }0 H};
, g3 T& C+ w! P& f7 v% K. x, C3 j& B# H0 v2 S# x' P" b4 N0 g! x! |
static struct gpio_led da850_evm_tl_leds[] = {
2 z2 M) v) q" M/ v. P+ s {3 ^' w6 K, r' d! j& {9 g
.active_low = 0,- T' C$ y, y2 I/ X# ~
.gpio = DA850_USER_LED0,0 e0 K V4 [6 L4 v$ S# X
.name = "user_led0",' a% s, B$ g6 S% `3 x X
.default_trigger = "default-on",% N" R" K$ W$ v2 j
},
7 n; y% ?, s' f8 ]/ q {8 J5 a- R' ]. |5 u! ~
.active_low = 0,
% F* F$ }; a2 b5 @# R% N .gpio = DA850_USER_LED1,
# X* e! J% |1 T% V1 T- K .name = "user_led1",+ o* O$ G. W+ G1 W: x* C/ L' C k
.default_trigger = "default-on",1 F, q# y, }2 W% _% m0 B! ^
},8 `. t& i* ~9 o2 i+ b2 _4 T R6 [
{6 ?% a `, _7 \/ I7 x0 U5 [
.active_low = 0,& }6 g r* Y* @* t" v
.gpio = DA850_USER_LED2,
$ |* ~2 k. L: I8 G# S" N .name = "user_led2",4 i" Y3 Z t! F/ L1 J6 M: L
.default_trigger = "default-on",
0 v# b: [$ T: x },
0 ~$ S5 `/ `; N& @9 \% l {, n9 J( ^& R% q/ ]
.active_low = 0,1 j7 ~$ i. X- T' S# I# y2 g5 E9 K6 O
.gpio = DA850_USER_LED3,
' Z3 c. \4 i' h! u7 A F* [) e! ` .name = "user_led3",
- Q5 @# _# s4 ]* M8 v( C- a* b; F: y .default_trigger = "default-on",6 O+ q" y- J1 B9 R0 B
},
. ^' U4 O$ U0 E8 t};
( ~& G- x+ s5 B. `+ O9 s" k' m' Y- a: @1 z5 w8 l
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 F, i3 b0 r+ c( R0 w4 _7 g .leds = da850_evm_tl_leds,' w6 @& p& [6 x( R5 I( e
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 @( p! ~$ j0 j! H3 f4 c' z( \) E
};2 a8 W* E5 a" W7 f( ~: h
7 e F6 \- S( G! ^) _ v) s; x/ v
static void led_dev_release(struct device *dev)
0 `: [: p5 H+ L4 P{: v6 U. x0 n! Y! N) v0 t. U
};
: m: y4 u6 X7 w. ~, F
1 M4 c* T7 J Z+ ~/ L' j8 qstatic struct platform_device da850_evm_tl_leds_device = {
1 S S6 I3 Y7 T) i- x* p .name = "leds-gpio",$ I5 w" e' O3 ]- `0 i6 U
.id = 1,
# Q) v7 K9 M# w+ Q! V- ` .dev = {
! y9 g! Q$ s8 c/ M .platform_data = &da850_evm_tl_leds_pdata,
( {. _5 D1 e" |. C* S .release = led_dev_release,: @. z( ]* D$ E- `7 R* N
}
x& B2 M. n7 S};
$ R( d+ c( C+ _7 E' f% ~* g/ z0 ^5 t( T7 y9 S. W
static int __init led_platform_init(void), _" ^0 k* [$ h( R3 o" Z8 a
{) a6 `, {0 x3 c
int ret;2 C4 z- F" x2 e7 q# l
#if 03 D+ ]2 ?( l, Q) M# R
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- n) z5 ~+ [/ z5 N3 T- r if (ret)* e. z( l8 ~# b$ \" U
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% a* i( ?6 R' J- }* K "%d\n", ret);4 _8 a4 q& }+ M% l- k9 \
#endif9 T, z5 F# a6 S, s
ret = platform_device_register(&da850_evm_tl_leds_device);
1 X! j! f9 p5 ^* x3 k, f" N% u) _ if (ret)% O' }9 _* m( _, o- H) |' H7 F% |
pr_warning("Could not register som GPIO expander LEDS");
2 k' _7 N+ e6 f else7 N' n% H7 s- I. t# W* ?
printk(KERN_INFO "LED register sucessful!\n");
( Q2 ^0 G! }& F3 Z, m
, ]6 E# c: A4 S. n& u! c return ret;
/ f/ D1 m# j( l/ ^( L}, ], `" D: ]$ w7 r/ _0 e8 G
' j5 q% ?8 n6 M. \2 l8 G
static void __exit led_platform_exit(void)$ D( V1 L- C) z1 V; W" ]
{
/ o- P6 ~/ Q! w0 j platform_device_unregister(&da850_evm_tl_leds_device);
: w+ \% q( t- k, Y
& P: G* B" z1 @ printk(KERN_INFO "LED unregister!\n");
3 v5 S/ }4 P' J* N# n# j) l1 i}3 L. D. {% ]1 D8 E% ~
4 V6 v6 y3 l8 P5 O' D; c- P& ^
module_init(led_platform_init);
& j" B( `* e/ _module_exit(led_platform_exit);
: f1 @" G: F0 ^& c1 d' |! p6 b
3 l- s9 L/ j& d O( ], |+ oMODULE_DESCRIPTION("Led platform driver");
$ F+ M ]) D5 _0 lMODULE_AUTHOR("Tronlong");
# q# h& N, N0 } mMODULE_LICENSE("GPL");
1 }% g$ Q! l5 X/ _0 @/ m: u2 B
* n: Y2 T K9 R q |
|