|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" @9 `- v! r. K, S% w
#include <linux/init.h># [$ o- {; p! q
#include <linux/module.h>
: s& S1 @* L- q* T#include <linux/kernel.h>! q* G' V! G4 N+ g, s1 B" r
#include <linux/types.h>
0 J6 D8 |( f1 y% r+ Z F( E#include <linux/gpio.h>
" z1 f- G+ u+ `0 `" g% k7 Y#include <linux/leds.h>
, m# t6 O& {) \; I/ c* G6 l#include <linux/platform_device.h>
7 ]7 F) q4 m$ G
( e5 h% H5 q# c#include <asm/mach-types.h>3 U, Q$ q7 a9 M5 \- d
#include <asm/mach/arch.h>
3 Y/ r, W3 a4 b2 p- K+ i#include <mach/da8xx.h>& O' A0 _& l0 g! _9 [$ f# ?) a
#include <mach/mux.h>- X' N) v. d6 j' _
" z8 @, _7 c6 @1 o* e& N#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 W* ?5 u- v# h, I0 d6 F
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' S ]7 X. l8 L2 A- s7 P8 v
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) k3 t# |" V; R2 ]4 |4 x#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! o# V! s# d& R' b2 U0 R4 x! w
) k# N* t) n5 w0 o$ v/* assign the tl som board LED-GPIOs*/$ @" y* o1 V \4 @2 C! F+ S4 O
static const short da850_evm_tl_user_led_pins[] = {
% F9 R( C% |5 L- L* w1 G# ? X4 C /* These pins are definition at <mach/mux.h> file */
$ b+ y5 A$ M1 B) @& w& j DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 n' u. \+ ^5 H ^0 e" ^
-1
' C3 `+ @' O) v" N( D. R};
' h1 ^5 }( g8 X) w5 t
& Q$ v" O$ ]5 ~9 [, Wstatic struct gpio_led da850_evm_tl_leds[] = {
0 ^* z! D& |: B2 j {; [8 c2 x8 [8 ]+ Y0 P2 A8 F- n* }0 g
.active_low = 0,
b& }* ?- ^5 \& Z8 x! T$ ]5 K .gpio = DA850_USER_LED0," m+ c1 d- I) X5 U8 e
.name = "user_led0",
3 S7 U9 k( g% [& X .default_trigger = "default-on",
4 e/ t1 x4 M0 A" s7 F },
@* e# _3 ^4 z! g8 a1 L; G" p {; x9 d) H' e }1 F9 X0 w4 |3 G+ ]' \+ f
.active_low = 0,
: [7 h8 M; f9 \- |, m& { .gpio = DA850_USER_LED1,
9 C& U8 i6 T* t) S$ K .name = "user_led1",
) B% m1 \$ L# w/ Y# i7 e) _8 P/ @9 z) V .default_trigger = "default-on",' t+ g/ O9 C7 q+ m2 k4 Z& M
},
+ u5 C2 ]5 Q; b {
2 ]1 B. B4 {- V2 r, v .active_low = 0,
( A, o6 J8 M" i: y8 V# H. Z5 Q s .gpio = DA850_USER_LED2,( m4 X* i7 Q v3 }
.name = "user_led2",
1 I0 p+ F! w6 c% |! j, U0 r .default_trigger = "default-on",
& x7 c; x: s. L6 Q },
! a3 C* a% H$ I {. e8 N/ B4 D2 Z* m$ B* U( n
.active_low = 0,4 h* K; I+ `, I2 @: B
.gpio = DA850_USER_LED3,
" N( r$ g, Z+ t .name = "user_led3",
0 S- ~! n- ?$ \8 I6 Y* {8 T0 Q .default_trigger = "default-on",) I0 a, x/ N9 j& V7 B
},
! u; N" N" c9 P, X};$ s, `2 Q2 G& |- w8 c
$ ^/ P5 Y* J- W. E
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, T+ u, V, N s: k% {# k" q
.leds = da850_evm_tl_leds,; s- w; g4 T0 v: ?9 ^7 u
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; i7 q% P( d g3 n# _+ T- x};
% m' o4 [! X3 \3 d3 s5 V. }5 c% u" z4 g2 ]: Y7 D' p! l; x# n- O
static void led_dev_release(struct device *dev) y5 S" C, o1 y3 ]. b
{4 P* t8 ?4 {, V6 {3 f! F. J) S
};
! A- I, v: {4 t+ E* _6 P8 \- z: }" C! Q
static struct platform_device da850_evm_tl_leds_device = {, V& g6 R, n, [# S" s" Y) w
.name = "leds-gpio",
3 w$ u/ z+ A. I5 b$ k .id = 1,
4 D5 O: ]0 d2 R x3 s .dev = {
* Z I, g! s% h# i .platform_data = &da850_evm_tl_leds_pdata,! A1 o+ i8 c2 f% f* _6 {
.release = led_dev_release,0 Y- Q( Q: d5 f4 q O5 ^) H
}
9 x9 m( w! O6 m6 S# T};/ u6 X+ B- c2 e! [4 V8 ^" l- l
& E* t7 ^, f. f, }1 ]9 Y
static int __init led_platform_init(void)
. _) ?0 y# g: x# E& p6 U" U{
% Y4 u0 F$ K' a- X n* R# ^) }6 ~ int ret;
; d! P9 S7 A$ \5 h- |6 S% {! H#if 0/ j3 W2 o: }6 a$ J8 o" `
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 ~. p3 W( z$ ~& M6 }, W5 X! q if (ret)
0 x4 p6 q$ E$ A) ^" b& [7 B3 q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! r8 l5 e) k/ |; u! V
"%d\n", ret);# u% O8 | E* u# r
#endif4 V4 f z# F$ q7 p9 |( J
ret = platform_device_register(&da850_evm_tl_leds_device);
7 d [ b: _5 S0 _ if (ret)
' ]: o, S+ I& Q! n. r' K' u. @ pr_warning("Could not register som GPIO expander LEDS");( p6 D6 A3 S- u5 w$ `
else/ Q" {. `% B0 {% E* ]
printk(KERN_INFO "LED register sucessful!\n");" q5 {8 f4 [7 l7 X# F e. l* v% V
' M3 n1 U( W* L/ J. k- `4 I8 B
return ret;; ^1 F' q0 R5 U/ z& q( d( J3 S: ?
}! Y. T' j& R' z; [! x" p. Q
9 g) t2 x5 x. N" m. z' t7 q
static void __exit led_platform_exit(void)
" N: Z2 W. V* @7 W9 K3 [$ J{5 T! c. d! S* O: p" e' }' ^2 v/ ^
platform_device_unregister(&da850_evm_tl_leds_device);( w6 a+ X5 y% \8 Z' J
% `. M( Y- p+ Y5 S; [
printk(KERN_INFO "LED unregister!\n");
! p8 `8 p( }1 [) Y- k1 Q}
{% f" M2 G& A: {; J3 r5 K- Y' G0 @; W
8 L- i0 o% O3 P; Y. I$ Xmodule_init(led_platform_init);5 L- C9 W& ]" Z6 B
module_exit(led_platform_exit);7 `7 a4 j: K' S! Z9 C9 d' I
( T* g" g. ]6 @
MODULE_DESCRIPTION("Led platform driver");$ e C) ~( J. T0 b9 L5 G% @# s8 q
MODULE_AUTHOR("Tronlong");7 e% T8 H& s( U6 v
MODULE_LICENSE("GPL");
. u7 ]2 l" c. k3 w: G7 x: A9 e
0 {( ]4 k8 a/ A# { |
|