|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
h( E [9 c4 Z0 O#include <linux/init.h>% S7 g4 N6 n: q3 ^( e% D) c) ]" \
#include <linux/module.h>
# x; r4 K- [5 f8 b# C: _, c4 J#include <linux/kernel.h>: C! \4 x( q! T' t
#include <linux/types.h>
; Z" H2 ^, {! b' u- T7 a. s#include <linux/gpio.h>- O W2 F L$ J
#include <linux/leds.h>
1 O! }3 P. [# N$ X* a* P N#include <linux/platform_device.h>
4 `& I1 W. i8 |$ Q6 @* N4 J
6 d% {7 Y7 Y3 \: d2 x. J#include <asm/mach-types.h>
# o/ e6 h& z% B6 ~#include <asm/mach/arch.h>' o3 I0 ?! W$ }2 U7 @# F
#include <mach/da8xx.h>
# ~( x& r3 ^5 B' @4 ]9 L& V4 @#include <mach/mux.h>' | p& a. `5 R: s, o! T2 f
3 V/ N- k4 _* |; o, u6 C, @
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% ?0 n* t9 e" x4 [& b( j2 g
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) H% P& W- T& y( K5 y* v1 o#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ I/ ]3 B1 e2 n7 x8 y" P0 _#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& l( ~( r0 p5 V/ f4 c
$ [$ a2 H4 I& Q, H# F3 H/* assign the tl som board LED-GPIOs*/+ k8 O- h) s. m6 J
static const short da850_evm_tl_user_led_pins[] = {
& g" Z" F& U/ ?# D/ r8 L /* These pins are definition at <mach/mux.h> file */
# f3 G" G, X; m. l& J DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* E) [$ c: W( g% G, z' W
-1
3 v# m7 w* Z! \2 v7 K0 e};. `" H, I8 S1 W
( R& i+ ?! E3 V0 p; T) R2 astatic struct gpio_led da850_evm_tl_leds[] = {
3 K4 j+ h" x/ \1 A/ p {5 P! a/ E: Q# w% |9 M
.active_low = 0,
" g2 J! ~) m8 C .gpio = DA850_USER_LED0,2 I# P1 ~; B/ U
.name = "user_led0",
! l' b9 d+ d/ a' g4 \3 \ .default_trigger = "default-on",
3 l; i8 g$ F+ a& K( ]+ V8 Q },
2 ]7 d) I8 }! a7 L {
5 e9 w0 \7 e0 X. h4 C .active_low = 0,$ p; D* m0 P: N- c
.gpio = DA850_USER_LED1,
2 a* T& L8 Y5 V4 ?" L+ [3 H7 B .name = "user_led1",
, f, u2 a k( `, G .default_trigger = "default-on",
' w' K# o% m& O; S0 ^" r },
% ^- O/ K( Z8 R1 u7 p! d5 |. l$ _) R {7 i; j! ]: k& t' @) \) J, F$ v
.active_low = 0,
* F, w! V* s3 @) y# M .gpio = DA850_USER_LED2,
, B% i$ { E; M3 E .name = "user_led2", B# N# k4 W/ ^0 x2 b8 q. @
.default_trigger = "default-on",
. P6 j$ [! P+ s7 D; r: E2 m },
3 z* L9 \2 m* R {
; r" [4 o; d% z* D4 _1 Q .active_low = 0,
+ h5 \3 E' Z1 i; Z .gpio = DA850_USER_LED3,
6 c9 `$ V v% N .name = "user_led3"," f6 c7 q5 P8 I: I2 b8 ~6 @* _
.default_trigger = "default-on",$ M9 j/ Q$ N4 x( v! B9 c" D
},
# n1 _( W) e& g7 k* j};
- I! r2 c! G P# ?4 Z6 K8 k
7 O( h( ^4 \2 e/ A7 V7 v7 s( Kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 h9 A0 M1 s( |( f% q5 q2 } .leds = da850_evm_tl_leds,( p2 |3 s y& Q6 [1 b* x
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( d1 W3 _' g& F+ N+ ]}; y- }% A, o; p8 [" _
' W+ G: m; d; ~
static void led_dev_release(struct device *dev)
3 n* K, M; ~" G{$ H# n0 Y( v( Z; ^
};
7 ~( n: N& D6 k9 ^) p, {0 B( m
" N% ~& R ^" s* I% L9 R3 Zstatic struct platform_device da850_evm_tl_leds_device = {0 Z- a5 @1 {" M S# ^ K1 l+ _
.name = "leds-gpio",
( t0 U& [$ j1 ~8 V5 W0 E2 v% @ .id = 1,% i, u# o- o0 Z
.dev = {( }, q, w% a; E
.platform_data = &da850_evm_tl_leds_pdata,
7 Y/ [; d" y+ {; m .release = led_dev_release,
, y1 j* t0 R) e* M! N0 g }: x- v X, g& Z6 Q
};* }, d2 J Y1 o/ _/ H- k
. p: j( U, }5 U+ c7 V8 @static int __init led_platform_init(void)
0 {# G4 R) N' z/ d6 A{2 v- B j: p+ w' @
int ret;
% j( R" `) i: T. p/ D#if 0
" ~' ]: t/ _8 r1 `. P ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& ? [0 {) K' r$ E7 L: b4 R7 n
if (ret)
2 V2 U F* `; X6 T$ z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 \, o) }) y i) f "%d\n", ret);, H; M6 l+ b# `+ a, g
#endif
; B9 _7 V, z: z! c8 }; f ret = platform_device_register(&da850_evm_tl_leds_device);
+ h+ V4 Y" B* v2 K if (ret), i# u, O% c) M$ y5 V& L
pr_warning("Could not register som GPIO expander LEDS");
% p1 y) U+ _8 ]' M7 o# I5 d6 h$ U else
! P$ \: ^: R2 J3 g3 N6 ` printk(KERN_INFO "LED register sucessful!\n");; r0 l9 I6 }- x, T4 r1 P+ z5 u, ]
/ Q7 t6 I7 E7 z
return ret;% T; m/ |$ {) F# G+ @
}& m" k0 s# Y2 G. F
2 U0 ]$ k" D- x
static void __exit led_platform_exit(void)
3 i' m+ t& X5 ? ` J2 P{
( f* Y& I* H v9 ^6 i) m platform_device_unregister(&da850_evm_tl_leds_device);5 r T) O, b. z$ e$ B* W
2 ^) J9 \/ X: w- [, ? printk(KERN_INFO "LED unregister!\n");1 _. C! t+ v, \
}
- G( A3 r+ A* k* A7 e. A7 B, O+ B: G# L* U
module_init(led_platform_init); n% S/ H' b- v4 c! n. X$ z
module_exit(led_platform_exit);. E& P6 D3 @" [9 D* J" S- J9 K
; z* T/ `2 P2 ]# eMODULE_DESCRIPTION("Led platform driver");
* ]5 b2 L4 K; L( _' l+ T3 ?MODULE_AUTHOR("Tronlong");
" @- U, p. ]" L$ J9 QMODULE_LICENSE("GPL");
# F9 Q4 ~0 E: G# a% {& Q3 C# I1 \( R
2 H! {( ?' T$ ?7 F s3 j* V$ E |
|