|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 G7 l% N' @3 u/ |#include <linux/init.h>
3 L; B3 j S; R6 f#include <linux/module.h>
+ G- s$ K6 K$ o) c T/ F#include <linux/kernel.h>. s6 a" Y S: z* h5 \$ {
#include <linux/types.h>$ N% {! u+ n7 F u2 q9 ]. _
#include <linux/gpio.h>
$ M; v) p7 b0 t#include <linux/leds.h>) l! r5 ~$ n( Y* d0 j
#include <linux/platform_device.h>. @4 W& w+ d7 s( u7 N
" G+ m6 C, K$ N1 L2 c" j% P0 j#include <asm/mach-types.h>% t- d! S( ~4 C
#include <asm/mach/arch.h>9 o) |/ u2 Q+ h) Y
#include <mach/da8xx.h> i$ ]! K7 R ^- q* }5 j9 ]* I( G, J
#include <mach/mux.h>* M& P0 l+ D n
3 n' K1 G& H) S
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 M3 w7 s! q) K7 N, q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: ~$ v8 r6 k) F( [: m/ P( Y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 d9 a8 a5 }8 Z, {- ~. B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# x, L( t3 d1 n2 m/ ~
( A# W. ^' y7 z. N2 f- F) m/* assign the tl som board LED-GPIOs*/
, k) ^) I! H* J8 r8 |1 J% T$ r1 t! wstatic const short da850_evm_tl_user_led_pins[] = {
+ [* w0 D0 z6 V" c3 i /* These pins are definition at <mach/mux.h> file */; g0 L+ H) j- H. e1 [( v+ w" a
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 ~, ? }& @1 x/ S& |0 h: {* H
-1
' ^/ h& l- [% I1 [( U s};
/ B# Q2 {# @ g' C7 i/ N
( {, e1 v' u. o- i5 E3 ^static struct gpio_led da850_evm_tl_leds[] = {5 B' j4 w0 H( T; m2 h. C
{
% G$ Q# E+ }7 q* i: z .active_low = 0,
; n" P/ d, [0 i) s! Z: S- {& Z .gpio = DA850_USER_LED0,9 H" j& d: j* P
.name = "user_led0",; k7 n' W5 s& ~) v3 f+ v1 x
.default_trigger = "default-on",
- C- d. K9 j1 c& c }, a. }0 v3 j+ q
{
4 q/ A. P/ j# V+ r0 V .active_low = 0,8 Z% ^% Z9 d* S" H0 y
.gpio = DA850_USER_LED1,7 v. Q+ q7 U8 U
.name = "user_led1",! g) u( q1 `/ U7 Q! }
.default_trigger = "default-on",# D2 R4 \& i, G+ ^7 A+ d8 H1 Q
},7 m3 l! j" [+ q- v
{
' j6 B! O4 F; \5 r# S) X .active_low = 0,* ?* p0 {) C- ?! U6 p
.gpio = DA850_USER_LED2,
B+ s' J' _) ^) i" R. U .name = "user_led2",) `: c* {. d) ?; b, U& n
.default_trigger = "default-on",
/ c6 ^ Y/ k$ | },
L1 Q( q8 p) h8 N {
* w' x2 e, }$ w .active_low = 0,
) j4 p6 R8 z" Q4 w .gpio = DA850_USER_LED3,
5 ~/ J. Q0 ?: j; \ .name = "user_led3",
* G- P ^2 ? @7 K( `" z .default_trigger = "default-on",
1 {+ |$ G0 q1 Y },
. u! x1 \4 y6 x6 @* h" u};2 |6 k+ ^4 a6 s% e; c0 V8 w
q" n, Z; _) i; @: K% R% D& ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 O4 D: E3 d; o: H- m5 G" \: c
.leds = da850_evm_tl_leds,& h* v! Z9 H% x4 k; K" n
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 T7 {; E+ H' @" v};: U0 d. M+ P& X n$ |! \
/ l" {4 ?9 ~# n
static void led_dev_release(struct device *dev): J! V9 w1 x$ \ e1 p
{
9 j x" s5 v r+ z: ]};
1 a \/ H0 }/ \* o
p( e9 n; F- ` ^static struct platform_device da850_evm_tl_leds_device = {
+ M" m( S0 C' d G5 x .name = "leds-gpio",, U, }! d4 y) V' }" K
.id = 1,
5 b* p' z. k) B, c" u1 u .dev = {( Q0 `- E. _4 W" A
.platform_data = &da850_evm_tl_leds_pdata,5 X# q1 }6 G8 ]. b' R
.release = led_dev_release,8 w* C) B5 A# z6 I3 S
}4 h. l) v# E$ f$ n
};$ Y& q( [' y6 `; R A
/ G6 B- ?# S4 r5 C* h
static int __init led_platform_init(void)
A2 C0 E$ b9 x{8 ?( j: p/ N; L8 }4 |
int ret;' L/ I4 `8 G# y( R8 A" Q7 }) L
#if 0
; o$ [$ ?, b, M& F ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# P( A1 ~& t3 E8 K if (ret)( W9 l, \- m0 `$ s$ E& C
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# G* J) r+ Q6 @9 H+ C0 ^$ b
"%d\n", ret);
+ Q8 {! m; L& N( w4 Z# L/ q0 {#endif8 \, N( x( J7 {* K- C4 l0 }" O
ret = platform_device_register(&da850_evm_tl_leds_device);: |& I' g+ `6 X7 [4 E0 \4 t. p
if (ret)
- |! x! @' k z pr_warning("Could not register som GPIO expander LEDS");
6 [4 w5 L. }; |8 t else
% K" x# j( U& L5 D, S: B& U printk(KERN_INFO "LED register sucessful!\n");& c$ X: z; G, W7 E
`% s" N) |& h. R return ret;5 ^( i8 t5 v2 ^; q5 R
}& o0 [" Y* b" t' F8 ]* I
% L2 f" d- K* L8 I6 Rstatic void __exit led_platform_exit(void)
2 F, t* A, k2 C4 K1 }# j _0 X6 w{( }9 X2 U0 L( g& {% P( D
platform_device_unregister(&da850_evm_tl_leds_device);$ ?" Y7 e3 w5 B x
! ]& Q& t+ C7 H( R$ g
printk(KERN_INFO "LED unregister!\n");
. |( Z! c) W' K, G2 g3 c}
# b8 g0 s( l: t$ E1 `; h ?0 M7 E, N5 j. v/ Y3 ~; ?" A
module_init(led_platform_init);' V! u' D9 z- |0 E+ X& G
module_exit(led_platform_exit);' u6 e0 q8 b/ d" [! V8 j8 C) ~
2 k. ~7 D6 r* _6 M' W$ D: m
MODULE_DESCRIPTION("Led platform driver");
; p5 d, T* l, s, k7 C0 m# bMODULE_AUTHOR("Tronlong");
5 j% T8 U; V7 `MODULE_LICENSE("GPL");
0 a1 t+ l; v% C1 Q* L
+ k5 t! P$ w( K3 S, |6 @2 a7 i% U+ o |
|