|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 D0 G* p' J) m; ?4 u7 S6 h/ I
#include <linux/init.h>. y& _5 w8 Z5 G
#include <linux/module.h>3 I" p" z7 S* B* m. |# R% K
#include <linux/kernel.h>
% \' q! S, j4 C6 d- t) R#include <linux/types.h>* B/ ^, n6 A9 I
#include <linux/gpio.h>3 N* |8 V1 ]5 M1 W
#include <linux/leds.h>% {* k3 W. l' e6 t$ _, |5 @2 L
#include <linux/platform_device.h>( e6 B& b9 Q8 N( I
8 C4 b8 d$ n$ E" n; M+ m#include <asm/mach-types.h>
4 k. Q+ Q$ O7 Y% O#include <asm/mach/arch.h>
5 x L1 Z# H+ A! p#include <mach/da8xx.h>
6 `6 L6 [; J0 Q. C, o7 }#include <mach/mux.h>; f: ?0 h: [ R6 g* m
- V, B3 m/ H- i6 _#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
3 I0 C$ {- q2 ?- ?2 n# [* ~; F#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ G0 T" n- l& X- w. ]4 g( b
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 y- v3 W/ O# X. D2 f2 @0 W#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ u* a X! [! p& y! `
/ }* e: j# J. R3 U, K6 c. Q2 p ^
/* assign the tl som board LED-GPIOs*/
g0 c2 S: q e2 O2 s# p1 h, zstatic const short da850_evm_tl_user_led_pins[] = {! m2 ~- w: n' J' c: h
/* These pins are definition at <mach/mux.h> file */! p, {+ p1 O' t2 S4 T3 I
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 M0 R0 z1 S9 O. ~3 o4 V; k- a -1
/ [- Q" D1 N: S* y* ?4 L};$ m0 X% k( D) o i( W6 f8 @7 \
' k; Y1 ~8 t6 P3 m5 G0 v' N" Hstatic struct gpio_led da850_evm_tl_leds[] = {
% [; \* d, G1 j. J6 J& n- [; e6 H {
% w$ l1 S' s9 U/ ~( d9 l/ E .active_low = 0,
3 o0 O( B7 V% r7 d .gpio = DA850_USER_LED0,. |2 d* ~' @+ c) u, |& Q
.name = "user_led0",! n+ I f7 n) k, l e, A2 B
.default_trigger = "default-on",
! j' S8 `: U. z. z },
- P0 K* C* W# x% I9 q3 |% C {
# q% q- H' z# u. R h9 T .active_low = 0,
, q. G0 G0 R, @* a/ q .gpio = DA850_USER_LED1,
2 @% x8 x4 G1 d' u. j: t .name = "user_led1",
9 e: a6 D2 u ^$ y- v .default_trigger = "default-on",
+ Q5 g' x0 [9 g: D2 k5 | },7 |. I. |( C8 T4 H! N. U
{/ S4 F* x* y. m1 y) ^3 R: v9 A# i& @
.active_low = 0,
& V2 j* T1 C0 \9 j .gpio = DA850_USER_LED2,$ r K2 t1 J( [; b# W+ M: k
.name = "user_led2",7 W0 Q* ~; e2 M, q5 y N
.default_trigger = "default-on",9 V7 v2 v) M3 U
},0 J3 f- o. `, i
{
8 {& P' U5 l- N! P. v .active_low = 0,2 w6 x9 Q6 a' h) B9 V
.gpio = DA850_USER_LED3,
. S c. \$ a0 c$ o5 Q* \! u9 [ .name = "user_led3",
" N3 V- R1 U: |. [7 U5 q; m .default_trigger = "default-on",; x1 g+ l, W% R+ l" r. s% B
},) T" H: S& m, w4 K/ x
};/ d1 D9 q3 ~7 v; L u% q5 F
% L$ h+ e4 p$ k/ @: M! T. {& }! p; R( tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# @& v: X" k/ n/ t
.leds = da850_evm_tl_leds,2 i/ |) x N, N/ R, @2 J
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 A; ~ {# h5 L& i6 n$ i
};
. {& N. }3 d9 }
" m# I9 K5 O/ p; Q5 q* P. A5 gstatic void led_dev_release(struct device *dev)
7 x6 F) D- d! o( M2 H! Q( Q' r{, n( v( F) _; D- |2 L
};
6 m( F4 U C" L# P; P% p
: d0 B2 e! ^/ q: kstatic struct platform_device da850_evm_tl_leds_device = {0 N; b* _" o Q e% L" [
.name = "leds-gpio",3 K; T9 o2 F( c% [' j- ]% ]/ O
.id = 1,! x" ?7 s5 D4 D0 v+ V# C
.dev = {
0 f; F9 f4 D8 s2 u7 ^ .platform_data = &da850_evm_tl_leds_pdata," `0 L: ^4 o$ M
.release = led_dev_release,
6 Y$ ^$ ^8 \) B6 q- b# t }
{4 M. N3 A) E; }/ D};! u* J3 C6 f% ~, U# D
* v8 Q) F8 [1 P; B
static int __init led_platform_init(void)
, V" f% H7 L) ]$ ?+ y5 |& K{
: [! g& k1 ^- B; _ int ret;
3 x* e3 U0 G6 E" R1 ~/ m#if 0
4 c% V( X0 V5 P' m+ U4 ` ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 ]( o Z5 W1 d2 L( |& ~ if (ret), N7 l- E/ b5 j' L
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 O# K* t3 [3 `: g3 @: j9 H "%d\n", ret);
- F' S# _+ z$ J R4 B3 x#endif0 O% o: {5 L% @' G: C1 P
ret = platform_device_register(&da850_evm_tl_leds_device);0 r3 V9 c3 t# h0 w2 o5 n( V
if (ret)
6 z* b( N. A: ~1 _/ ]! y+ @) W) W pr_warning("Could not register som GPIO expander LEDS");
9 n4 m$ _% W1 \0 J1 x& a2 _3 q else- i% e+ R0 |: r8 W s9 ~
printk(KERN_INFO "LED register sucessful!\n");
& ^" ~9 }: |5 {7 r& o) v: \2 r b4 G6 M, J2 b
return ret;
, c) ?% m, V E; k}) e9 t: T1 I% B8 j) L( J
6 S# d R2 K5 v) A4 F0 Astatic void __exit led_platform_exit(void)
+ m8 T! g2 J/ i) ^{
% L- d1 p( B) H% d4 d! R platform_device_unregister(&da850_evm_tl_leds_device);
: T. c" C8 x. ]% Y
" ^6 e+ D5 H* @) L& ^ printk(KERN_INFO "LED unregister!\n");
9 R! m k( [4 j8 C}
/ P( I8 g! e8 W; V
3 c5 O& A' t3 {# e! k6 e$ ~4 Jmodule_init(led_platform_init);
+ ^. ~, M: f+ Y$ @! |0 [/ ]module_exit(led_platform_exit);
3 {, J( b" t* K* R/ I+ v6 C2 i! V* _8 X: f3 y* Y1 a, p
MODULE_DESCRIPTION("Led platform driver");4 `; } ^- o& n+ g% ^5 ?9 q4 R; u/ [
MODULE_AUTHOR("Tronlong");/ F @& R1 z& b; A8 A r1 P
MODULE_LICENSE("GPL");( m: ?1 ?: D B$ n. c0 s$ n# }6 \
: z/ c- w5 O% h! `
|
|