|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 \" |" d9 Z" P# t4 Y2 u+ \
#include <linux/init.h>
% O1 E; B3 s. ^4 Q c6 {$ a3 o#include <linux/module.h>
' J! }8 N2 v1 t @ X9 ]! q( h' [* k% e#include <linux/kernel.h>
1 ^6 k- n- A, E3 E. c#include <linux/types.h>
D; C; ] ~9 w z+ W5 A#include <linux/gpio.h># h5 ]2 t/ v* G9 Z( b6 X3 {8 h0 V
#include <linux/leds.h>
" }& ?% h5 }: G- F+ P$ ?; H#include <linux/platform_device.h>8 a( i0 n; v( h; z
* u1 {; l* E, n1 d; @2 f. |6 u/ S#include <asm/mach-types.h>
0 R+ i3 R x; D% {5 G2 N* \#include <asm/mach/arch.h>9 u% a5 @4 y; q z: K8 P( A0 e" n+ ?
#include <mach/da8xx.h>
- v+ V; ]7 p4 t#include <mach/mux.h>- O6 M% @& _( H: j9 [% E) [$ P
' B! S" z9 a1 w- G4 d* @# s9 V# j
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ l8 c% R ]4 p#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
U3 c% c5 G; P" v0 A#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). N4 N( d$ c2 `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, @! D, l" a# e" {0 Z& h, F' e* W1 Z5 O- t
/* assign the tl som board LED-GPIOs*/6 [' D# X% p/ H
static const short da850_evm_tl_user_led_pins[] = {, d& R3 L r' A: w& p- z; U
/* These pins are definition at <mach/mux.h> file */ A5 g% t! J+ J
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) H& h( z( k7 u% s/ C7 z' u -11 }' i8 Y7 u7 `3 q8 Q+ R0 ?; X
};% A" W7 d6 g7 ~9 S1 k& r6 f( D- o
# z) A X8 a( H3 q* c7 @" U1 \static struct gpio_led da850_evm_tl_leds[] = {, R, ]5 \+ Q. [7 W0 k
{
* u; s+ B/ R( t+ w# O4 T0 `$ d5 u .active_low = 0,
( p5 s4 {% G; D& n! W, H7 H' q .gpio = DA850_USER_LED0,
9 d' s& G( ~+ k, r' _4 v .name = "user_led0",$ l# Z v7 @- {1 [
.default_trigger = "default-on",
& i" S" f+ V1 W# D' v" e" q. O },0 A+ P! p, M2 _" D1 x, b: m
{ C$ E( ?: j* H3 ]% |6 S H
.active_low = 0,8 j7 V2 @2 d3 x- p, j6 O; e
.gpio = DA850_USER_LED1,
* F9 b0 J+ ^6 S/ @: E( r .name = "user_led1",
5 T( f" A7 O2 E$ N5 w6 Q) a .default_trigger = "default-on",+ t, H4 d9 s6 V8 I+ {0 j
}, a( w3 Q0 `% d$ j( ^3 T0 I0 l
{
6 t {3 E* u; R1 G' u1 ~% @ .active_low = 0,
! {# u8 ~% \5 R( T% i1 S( d& _* i .gpio = DA850_USER_LED2,; e! u' D1 b) A
.name = "user_led2",9 P, O, T% l; u1 ~
.default_trigger = "default-on",
. s+ b; v; Z7 V },
1 i% t7 |2 A3 Q N5 S2 b# c4 s( k {
* u2 } x5 u2 N% w .active_low = 0,
7 I) E3 E' }8 J7 n' D .gpio = DA850_USER_LED3,# w7 m* e* Z- V' {" t1 Y
.name = "user_led3",1 J! F8 i& V% w
.default_trigger = "default-on",' d$ u6 Y6 p. K) E
},
8 B: z$ s% y9 Z1 u, f+ _0 S+ g};
: s" m* e* G3 }1 T& A$ F$ ?! J: Q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* |" k3 E( X; H7 O
.leds = da850_evm_tl_leds,
5 n9 }) h! _* q" R$ \" h8 E. M .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& O* {/ R, A4 k% ]: Q$ R0 k. d};% Q1 a% W3 D* F3 W
# q4 a* A! e2 V$ @static void led_dev_release(struct device *dev)
1 \6 v( F- @5 s& E{
1 Y" c' d" Y4 y6 O& B7 y};
9 F0 p3 B4 n3 r1 f
, y: z/ b. P- E5 E+ f) y4 kstatic struct platform_device da850_evm_tl_leds_device = {
2 z$ c" j9 C$ z) w: { .name = "leds-gpio",
1 i) d3 i% h) P% r .id = 1,1 ]! ], p9 n7 H- Y; i/ M
.dev = {6 _8 e" c8 \( G5 {
.platform_data = &da850_evm_tl_leds_pdata,
. \) G/ y. J5 w: r$ j .release = led_dev_release,
0 a i* ]5 o# E4 P3 c! I, X% W# l5 b }# |/ d; j* G8 @* s6 f
};* F7 ?1 F+ @ `5 _+ s& `! d; i
1 f7 p: E; O* v& o( c% A4 xstatic int __init led_platform_init(void)
! g. S+ g9 a3 V7 H2 `, c8 @" j{8 j+ e0 L- R5 b! |) |1 n
int ret;
% B( |" H) a! c4 ~- G8 O2 Y#if 0+ }3 J% I6 o! K
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- d' ^5 v/ B' I7 H: |6 p8 h if (ret)
6 F: S+ V( o% r, i( T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! q6 k2 C! {1 @
"%d\n", ret);
1 C2 \9 G- a9 ], Y. b9 ^* }. d5 c#endif7 L( x4 N- [8 t3 { Z; m
ret = platform_device_register(&da850_evm_tl_leds_device);. {# j8 ^* N! s
if (ret)
3 E" m, y6 Z$ M9 k' k6 S pr_warning("Could not register som GPIO expander LEDS");
$ z( K$ k# P1 L! [) b else
* f( c6 U/ }+ ]5 o' A$ ]; {5 G$ s printk(KERN_INFO "LED register sucessful!\n");
# m! s9 c L2 b1 h. w7 K0 I: i
" P A' q* d+ S ]! J) Q return ret;
7 ^ F- h+ e6 \0 Q6 S}# W9 E' M9 o6 l' n+ E4 a- t+ D
$ x% C* I& e6 `. ~/ v3 P
static void __exit led_platform_exit(void)
- c0 }3 i7 U+ R3 h$ O4 ?: @{
% d' @+ J. E: o. Q platform_device_unregister(&da850_evm_tl_leds_device);' e. c2 o( t ]7 f. d' \6 H
3 ] ?6 Z. X3 ~# }
printk(KERN_INFO "LED unregister!\n");
; e- w5 U/ x; v}
1 }. O1 K. L& P, ~9 x' q+ n' i+ r- K% E5 n4 o
module_init(led_platform_init);
R( A }* V# I9 R1 g1 fmodule_exit(led_platform_exit);
) C# l9 P" O3 [& m: S; K( t
; e7 @/ u4 X/ f7 G8 QMODULE_DESCRIPTION("Led platform driver");: k. Z6 L- P6 M3 Y6 J9 ~$ P
MODULE_AUTHOR("Tronlong");
6 B" `- ]/ ]# R; m9 `2 ]MODULE_LICENSE("GPL");
+ `4 H1 k, w- Z5 [* u0 L( z3 G+ @9 O9 T
|
|