|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( H! B" I. p5 H( O#include <linux/init.h>, d9 y& @) x, {% R# u, F& G2 x
#include <linux/module.h>) Y/ ]5 e4 I4 P
#include <linux/kernel.h>
7 D) [% z; x: x" G( s#include <linux/types.h>
! j* `$ h; X0 Y#include <linux/gpio.h>, A, H9 |4 g' s; z) M; Z
#include <linux/leds.h>( Z( o% t3 n) U" E5 d
#include <linux/platform_device.h>
: Q5 N, R4 Q: s) M. a/ M* W6 j h% }/ G; g1 n
#include <asm/mach-types.h>
4 K% Q. P8 f; e: Z#include <asm/mach/arch.h> Q: L4 `5 i+ F* M9 W4 y( m0 [* g* R
#include <mach/da8xx.h>& Y, I; D g. T0 F: O5 h. n j
#include <mach/mux.h>
: v+ u; H: b7 x9 `% Q) A: [, }) ?8 ]( N+ D( G
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ N9 M* L7 B q! r' w
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 _# J& K0 c9 P' V4 i
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) J# {5 ^) J! b& c* x
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. h% o7 V+ g4 h( v' J$ k" Q6 N5 k! s% I; e
/* assign the tl som board LED-GPIOs*/
2 K' W# W/ X+ d4 E8 n7 gstatic const short da850_evm_tl_user_led_pins[] = {5 y# E X6 x( k1 _; U
/* These pins are definition at <mach/mux.h> file */
. R1 m8 \1 i; ?" A# C8 o# S DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 J9 q# R* _7 W# v2 F; c -1: m' ?. f; \" [; y. P* n9 U
};: h0 [( W4 G' F' p: ~) I
* e& R" _& q3 k5 O' \static struct gpio_led da850_evm_tl_leds[] = {4 I+ L& b9 n& o, H6 N0 [1 b# Q* k2 p
{0 S" f( k2 k) B4 ]5 t/ X6 l
.active_low = 0,7 S4 C$ ~9 j' N* W
.gpio = DA850_USER_LED0,
/ d( Q8 x, z& s% i. r .name = "user_led0",0 P0 B1 k, u: @5 i! J8 ~# x
.default_trigger = "default-on",; I7 V* F* z$ _+ E0 N6 v# c. X
},
6 a7 z. L5 l% ` a, o3 o5 n {/ k- h' v7 @: \: |' J
.active_low = 0,- f0 g* I" M2 J v* d
.gpio = DA850_USER_LED1,4 d. s- a* R7 I" Z( q) W2 l
.name = "user_led1",
9 G4 o, z \, r; x p ? .default_trigger = "default-on",
) {- t& r0 H' X- }3 @" g },
& `0 @0 S) w2 i: L {, J* F7 G; U5 A
.active_low = 0,
* G* }* Z3 V( y* S. }% N .gpio = DA850_USER_LED2,/ O& `$ ` K s1 b" c- d
.name = "user_led2",
% R* g1 D' }$ n .default_trigger = "default-on",
. n9 g) L7 x8 C b8 A' [ },
f2 W2 R# F9 u. S {
8 x6 V) V Q6 P' j4 ?, {) q/ A .active_low = 0,! q5 \8 X+ |% H6 L, a2 \4 u h
.gpio = DA850_USER_LED3,- n" W) s) M# E! g" Z" a# |
.name = "user_led3",
! i% a- N0 P- R7 q" W* w .default_trigger = "default-on",- {+ W7 [1 G2 H* q! z" ?' {: y
},* [& q; g: ~7 Q0 l t2 M
};
* M7 S" {% T3 m$ G" a( I' }* ]! W4 b3 v' R
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 l1 X3 T, Q- x" \6 D) V
.leds = da850_evm_tl_leds,3 p' W1 ]" P3 p
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 {4 G3 a# `) B; V f; s: S2 P% q};/ q+ w* Z8 v4 }* v$ U8 [
i$ G. O# ]2 s, k. Q" Q( C8 o5 @static void led_dev_release(struct device *dev)' O4 _3 Y d+ ~4 N6 G
{
* n) j X- E! T, h' `};9 \0 z8 l* N! W; c0 ?) Y/ ^7 q
# |7 f3 c. n Z \; wstatic struct platform_device da850_evm_tl_leds_device = {
' |- u. F) @; j# }% n" R5 R% [ .name = "leds-gpio",7 p7 w& o1 j8 W& l+ A& w$ a. n
.id = 1,+ j3 b) Z$ s9 {0 q5 u( l( G! e) b
.dev = {
- u1 C, i% C, e4 a9 B3 M" r .platform_data = &da850_evm_tl_leds_pdata, E. r2 e) A% r# L
.release = led_dev_release,
2 ]% Z8 B& m. Z8 l }
, m) {. Q/ [) P V0 H, x u};8 Z! v+ q% F7 J! i1 w9 f1 f( i
! V x. s) M7 B+ J& S! H
static int __init led_platform_init(void)
' [/ P( |+ l' B2 t, u% b, z2 ?" w' r{
% l3 G8 D2 j0 ]* E int ret;" {) j$ u) B6 Q5 Z
#if 0 h1 ?/ ]+ y# R
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ P2 E$ {! {: J. w if (ret), r W/ q0 B) F D" M3 ]
pr_warning("da850_evm_tl_leds_init : User LED mux failed :", i" {4 W. R- u. [0 b' T1 t
"%d\n", ret);
7 t2 w, U& l; }3 a( t/ ~/ I7 Q#endif0 Q8 j2 N* W( a. x
ret = platform_device_register(&da850_evm_tl_leds_device);
/ `0 s9 |% r) t8 i% [3 C; G3 D if (ret)
, a4 _; b$ f; W, o' B+ I pr_warning("Could not register som GPIO expander LEDS");
% C7 m; A. C1 |/ s# A$ | else
& n, Z9 |( K0 Y! E printk(KERN_INFO "LED register sucessful!\n");
6 _" _ ?3 k) |- k- w$ S# ^2 J% E, {9 J( n1 b
return ret;0 t2 V% D0 ]" C1 r' K( W! H8 P) D
}
% [- W. e, T [- C) t# y0 }9 n! {+ x4 o$ {
static void __exit led_platform_exit(void)) _ u. @0 f3 c, ~/ ]$ l% c
{% w# Z( Q, p* k) ^' b( L/ j/ i
platform_device_unregister(&da850_evm_tl_leds_device);
; X+ u( [, K5 V( S7 o. w' y' `5 m
U; i) X8 b' U; G8 j. L" {$ E' f printk(KERN_INFO "LED unregister!\n");
. ~. w/ y D: ~' C4 Z}5 s8 i: b4 v* @( }* r! n- I
. b% \' [2 x$ G- ]) S* zmodule_init(led_platform_init);
! h5 D! u1 @ ~+ S* u1 v: ymodule_exit(led_platform_exit);, ]( H! c+ ^/ {& ?) _5 t V
; Q0 y2 b) h7 {% p/ `0 W4 M U3 ]
MODULE_DESCRIPTION("Led platform driver");8 z% j( W% T! @* G6 C: U/ }3 ?
MODULE_AUTHOR("Tronlong");+ a* Z7 ?5 G7 ]$ T
MODULE_LICENSE("GPL");
; i5 L E$ X/ l( M* @( Z" Z0 N% g7 `
|
|