|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 E! i& h4 w4 e
#include <linux/init.h>
7 Q' ^- @" P% a% i! E0 w#include <linux/module.h>* n& l e) ~3 z/ {# ^9 ]6 w
#include <linux/kernel.h>
# ]0 C4 y3 m4 P% _3 j#include <linux/types.h>. g' w7 J( q$ R* f
#include <linux/gpio.h>
" n- f0 _1 R! b5 c& C#include <linux/leds.h>
* t& k& W! ^7 p% s#include <linux/platform_device.h>( c; Z) Q% T: y) K8 r& t
8 s8 \0 A. ?3 R/ n8 p2 S) B% K
#include <asm/mach-types.h>* d9 R: B: H7 @9 q# L, j% G
#include <asm/mach/arch.h>$ O. ^1 ~( W; w/ t" z
#include <mach/da8xx.h>, m# k7 D% X2 X) J# x, d
#include <mach/mux.h>, g1 \9 u+ _1 d6 L6 e* @0 i- ^5 C$ ?
3 N" i7 W/ }; _6 c
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! e( [1 }3 s* ?$ w7 X- X#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- D" x" D V+ l: k#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- y3 b7 z; l, M3 J4 J1 Y' ~
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 w% S) M% s, J( I- V. d$ w: }) w, W/ ?4 O6 C
/* assign the tl som board LED-GPIOs*/
, I( h: d' P6 Y* t% S" s, W+ A7 Lstatic const short da850_evm_tl_user_led_pins[] = {& U" j) h1 h, \+ U2 Z- r
/* These pins are definition at <mach/mux.h> file */
7 d7 A5 l" k3 y" C/ \ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,& J1 \/ x# Z: Q6 N2 v! {0 X9 H
-1
% P! |4 X6 p2 O# s$ H};
: R; D! F% I' x8 j( O. f N; N* |- d! [0 z$ v K; Y a9 E# U% v
static struct gpio_led da850_evm_tl_leds[] = {) M% d, P {$ _+ I3 `
{1 f* L; W+ w1 w
.active_low = 0,5 X* X/ k7 o9 C* S, D2 M
.gpio = DA850_USER_LED0,
6 {- z9 c* R0 r! r1 R! h9 \6 R .name = "user_led0",# W% |( b6 u* Z- Y5 G0 j
.default_trigger = "default-on", A% c# m* P0 [- o2 q4 L
},
, K" _% b$ t$ K {
0 x, Y& M( q7 _6 c# I, u6 s9 r .active_low = 0,: D+ t& p* G; j. `3 P( q
.gpio = DA850_USER_LED1,/ m4 u6 J+ D: \4 s! J3 g. r' m
.name = "user_led1",
( _, g9 ^2 w0 _: [8 D' _ .default_trigger = "default-on",
) N8 _! \9 x0 y+ ^8 P" k8 Y9 U _+ j },
. Z F# B" @5 q6 F9 N* K, M {
" k7 l* d# c% C$ Y7 s .active_low = 0,) |9 n3 R8 |( h9 u% Q: `1 u/ b9 K
.gpio = DA850_USER_LED2,
% X) f8 y+ N& g& X, j* p .name = "user_led2",7 T4 O: C4 t0 C. f
.default_trigger = "default-on",3 T3 Y, ?" n) z
},( \! Y: i t3 ~* w
{: W" e* u4 g# N9 ^ p
.active_low = 0,
" I5 Y/ [$ w1 |. Y3 n1 _ .gpio = DA850_USER_LED3,- y! |6 g4 u7 T% Z
.name = "user_led3",
+ K4 J6 x2 y! e' w B% f0 I ^# O. a2 @ .default_trigger = "default-on",
" t, r2 U: r' ~4 L( |+ e" b+ v },
5 q: y; x$ |9 w/ }};# F! A+ @, \ q& J5 \% T3 `) N" y
- h! G0 m! W' e2 V% j# F
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. M) e$ x2 d% m; a8 q
.leds = da850_evm_tl_leds,
2 V8 H, K0 f/ e: [ [! u) L .num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ H P8 O' q0 v1 I9 E2 s; u
};3 k+ ?9 Y; b6 q* ^& N, J: T
H9 }$ R& M0 ~) E) I3 e( a/ l
static void led_dev_release(struct device *dev)
. Q4 c4 ?4 o2 ?4 @4 P% w{
. w. q* j* j/ b- r+ m7 U};
6 B: U* _4 w% n/ ^3 C
: i. ^' V0 z( r6 Hstatic struct platform_device da850_evm_tl_leds_device = {3 ~( H+ L! ^# v; d7 y
.name = "leds-gpio",3 e" x0 t' M) j2 V. U: t7 t
.id = 1,
. c5 I9 z! W" B9 t# _ .dev = {
, u2 r4 W4 \& I: F" O- a% B .platform_data = &da850_evm_tl_leds_pdata,6 t# V X+ a3 Q% e/ d5 x
.release = led_dev_release, R. c4 p/ _) l2 `; ?
}
8 l+ ?& V& e1 H; Z% a& q};6 W1 @0 H" d8 F3 m! P) q) @5 u
% _1 j% z9 g. R7 h" H- vstatic int __init led_platform_init(void)
+ F, U2 S7 r+ ^{
6 q* y/ |/ w! [ int ret;3 e$ k7 ~; l! Z1 Y9 c/ s
#if 0
& r5 M6 a. B5 v# B: z8 ], O ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 g6 [8 l1 z |, R6 v5 \9 o if (ret)
) W6 K( X1 Y) l) u, |( g pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; n4 K+ Q. |% y l+ ~8 k/ f& D4 W "%d\n", ret);
9 L6 ]6 Z: Q: Z6 s# v2 H#endif3 K/ w0 V7 B3 {( O4 a5 {
ret = platform_device_register(&da850_evm_tl_leds_device);9 x4 f9 D7 ]% `8 e/ F& e1 e2 H
if (ret)
' n! O0 N. ] E+ f pr_warning("Could not register som GPIO expander LEDS");+ i" ~# S/ c" C( q6 `1 j
else$ u; q* v% G6 ?, p# d
printk(KERN_INFO "LED register sucessful!\n");& M" \. i6 c. r' V I) E& o
( T$ ?& u4 o% G0 s. e
return ret;' q# K- X5 \7 F4 y# B5 U
}
% y; a# S, x. W' U5 q& F' T% y6 v+ n1 L4 ]4 l
static void __exit led_platform_exit(void)
, m& t) [& l7 i% c- V/ o2 V& x9 W{
5 o% s% g7 D% c1 t. n* X8 A platform_device_unregister(&da850_evm_tl_leds_device);
# D7 H Y. V# Q$ z$ C" ^9 h7 H0 R+ k+ o2 G- v4 [$ D' X) ^. ~
printk(KERN_INFO "LED unregister!\n");, F- |9 r3 N/ R) C( Q! W
}
* r- L k3 Q, k( [4 ^
5 u: m. g( o8 ~1 w# n4 G7 ^module_init(led_platform_init);
! ]( I2 e3 U2 Xmodule_exit(led_platform_exit);
1 e" X$ j+ A3 b/ a- }, h6 J7 M2 @3 E0 n
MODULE_DESCRIPTION("Led platform driver");
* B" y- H7 t# U& G WMODULE_AUTHOR("Tronlong");
9 f0 k7 ]: H4 ?MODULE_LICENSE("GPL");! _& [6 i! L4 C, l# h
8 R4 b" H- `! D
|
|