|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 l/ a- k# j3 ?- H. W#include <linux/init.h>$ M5 ]% ]5 n) Z2 b$ ?9 y
#include <linux/module.h>) y7 u: ~) t' w2 j' @3 z( @
#include <linux/kernel.h>$ r$ K; t$ n7 e
#include <linux/types.h>
& X" o+ s& |9 P `4 S#include <linux/gpio.h>
, t9 d- J, q+ r: J/ e' _6 C#include <linux/leds.h>7 t. W% C" w( v" [9 L) ~5 r5 k" j
#include <linux/platform_device.h>* J& b% _* F$ l+ |. N& w* {
6 b: k3 G5 }5 m- \; L+ [- J% s& Y5 X#include <asm/mach-types.h>8 N& S( k5 }+ P! [/ m
#include <asm/mach/arch.h>
: b) O& S5 S7 m0 S: p#include <mach/da8xx.h>
2 G; ]) [* \: ^#include <mach/mux.h>
1 d9 ^8 f, w! C9 Y, h, Q4 c; l8 D' ^& t1 j* o& `9 h
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- S( h. C0 N4 n#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" E. v, }- [& F) Q9 U: Z7 Q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: \* z7 ] t' L5 s( p" C#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 H0 X" v7 W. S' w/ g7 W; ] H- n6 `- b1 M% E4 ]" `& S
/* assign the tl som board LED-GPIOs*/9 ?- C: r1 l' O" a6 r
static const short da850_evm_tl_user_led_pins[] = {
9 }7 Q1 z7 H3 ^1 s. v8 e w5 [ /* These pins are definition at <mach/mux.h> file */
6 K+ I% B$ @& E DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 p8 h$ @0 S/ L7 j& n -1
. m+ W, X; f( A; G0 _' L: Y& Y};
; K9 T/ x- d8 q' Z/ L
1 E; G4 s8 x) M4 R- I5 Lstatic struct gpio_led da850_evm_tl_leds[] = {- W: u! A: D$ @0 O0 T
{
+ c5 G8 ?9 V3 v8 b1 X .active_low = 0,9 T) S$ p' y0 {9 _9 K
.gpio = DA850_USER_LED0,: R' v9 \4 w( m+ a/ ?% c5 ?
.name = "user_led0",
0 u7 f# t* N/ o7 f/ Z% a V+ A .default_trigger = "default-on",
& Q# a4 Q; Q0 J+ m- y, [% C6 l& | },5 M! D$ I( u+ c" m
{
* U+ t+ o- ?& b: x% Q2 w) b+ U .active_low = 0, N8 R( ^0 f Y2 `$ R) j+ W- T
.gpio = DA850_USER_LED1,
( g `2 x) i0 j9 R0 F .name = "user_led1",
/ F# O; q8 z, N% c .default_trigger = "default-on",# w. c8 T# S" Q" k- R: P# i
},
" y2 R2 k2 T6 R2 X" U' n {
9 m9 X! `2 M1 y3 P .active_low = 0,
) D- u1 T# S0 y( m! M- z .gpio = DA850_USER_LED2,
0 I' m& I0 ?9 g- F/ F .name = "user_led2",
( a, o: P: L( e% c+ [ o .default_trigger = "default-on",+ o2 j, T' E* a" O0 j
},# S8 c# X* W2 w; g7 U
{
9 {4 v# }: Z/ y) J .active_low = 0,0 l' A! U8 W# E+ x. Q
.gpio = DA850_USER_LED3,0 _# i/ p* z9 D, [* V" \
.name = "user_led3",
" i+ p* p# q4 O; J .default_trigger = "default-on",4 `( C. l, }" i# X! [6 I
},; K8 n) Z$ L2 O" n3 S6 m7 \
};/ J/ Y# v1 H: A( \# z+ S: u
" [% r) ?' c/ G( W' U4 E0 Pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& E1 g& G; o- r" d0 C .leds = da850_evm_tl_leds,
* E9 N; R1 X7 U. c) ]! z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),) |/ y! v; Z& K! e- E! f2 `
};
( a+ O& _+ R/ q \' {- }% D6 F+ G
' j; b. y4 F4 p# Hstatic void led_dev_release(struct device *dev). b* w4 [6 g3 r4 i, S6 y* e
{
9 i/ X6 I1 i6 y3 Y" Z};
8 W& j. Z0 o$ f9 s9 s% Y" }2 M. q' A
$ k. w8 D4 c; q, M4 m; Ystatic struct platform_device da850_evm_tl_leds_device = {3 k [- L3 A2 `$ f
.name = "leds-gpio",
* |5 c2 s2 u; j5 Z- p% V; O5 r: j .id = 1,1 e( A5 U; k1 z) d: j4 |* j
.dev = {. B0 f+ p$ D$ ^3 Y2 T& G1 \
.platform_data = &da850_evm_tl_leds_pdata,
d" A! {) C( F8 V. u .release = led_dev_release,
/ b( E7 ^' ]! _9 o }$ l9 R5 k$ q) m1 `- L7 C
};
% d M. D M/ F2 f) a( J/ f0 ] s* W9 a
static int __init led_platform_init(void)
7 o+ U X6 u+ a9 T/ B3 B{8 S g" W2 g! o
int ret;2 t0 T8 E& c4 y$ a
#if 0
1 Y0 ]/ A4 b' l/ E* C' B; j ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; B7 k- _/ m' h) k4 W% w6 l if (ret)
9 s7 X( b+ H. a3 ^ pr_warning("da850_evm_tl_leds_init : User LED mux failed :" g6 Y } q. m v! k' g; A
"%d\n", ret);, j$ d, x8 i3 `. c
#endif
! L0 e+ H1 C/ r ret = platform_device_register(&da850_evm_tl_leds_device);- P! w% W% e* Q
if (ret)
9 a! |" t* d9 Y/ k) Q( I pr_warning("Could not register som GPIO expander LEDS");, _+ A4 _8 J3 P5 b9 ^4 p
else
" o3 Z- `, }$ u$ \' _' `8 |# j# i4 k printk(KERN_INFO "LED register sucessful!\n");
! u! b- R% z& O3 o5 i7 q
1 w+ d# g" U* t return ret;+ }2 s) f. y5 {* ?4 t- _& v5 v
}; R! m- |3 L8 E4 H- r; `6 Y1 X9 m; ^
/ a' [+ `8 M& \- W4 i( c- Lstatic void __exit led_platform_exit(void). X5 [5 y# a. w2 ] k
{
2 b# V; _" E, P& N$ V- d) M platform_device_unregister(&da850_evm_tl_leds_device);
. y+ ], B! [4 q P5 X& ?
. ?8 a& Q3 Z* w. E/ G2 U% U& T! q printk(KERN_INFO "LED unregister!\n");
1 O Y) k1 |3 B. p}
' D7 x9 C: F, f) P' r
+ s$ G0 a0 |- u7 j2 @7 Z% omodule_init(led_platform_init);
- J8 o9 o6 N1 Vmodule_exit(led_platform_exit);
# B" [+ N3 u5 V
: Q$ Z4 J2 l0 O3 SMODULE_DESCRIPTION("Led platform driver");
3 M' N* ?7 L" H) ?7 ]7 \: E. r0 N3 iMODULE_AUTHOR("Tronlong");6 ^1 g& |9 X! A& B9 U" _7 d! l
MODULE_LICENSE("GPL");
. E% Q" V9 a; t5 x/ J& o: L" [) b1 w# \
|
|