|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* T x- N4 F4 G; Z# Q2 z
#include <linux/init.h>
, u2 r" n6 R( z+ F9 v#include <linux/module.h> A: ~4 s0 k) O+ `$ q5 T
#include <linux/kernel.h>
& P$ ?7 ~# V) P e3 R2 Q, Q* @#include <linux/types.h>
( X2 |' T) ^+ f' E8 _* \6 o#include <linux/gpio.h>% I& \* e; x/ S% F
#include <linux/leds.h>
9 O( k1 q' u/ {2 j, Q' ?#include <linux/platform_device.h>2 _" I# y3 @# a; I* X
& T4 ~& n. x: \& K, H& ^
#include <asm/mach-types.h>
: {$ r. @! L# V% x6 u' A0 m#include <asm/mach/arch.h>$ }2 [. Y6 ?. O0 x
#include <mach/da8xx.h>4 c' \. W9 ~$ \ Y6 O* _
#include <mach/mux.h>
$ b$ p8 h! k" A" W: R* r& I% _& c: `5 h! n' o
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: N* d9 ~1 x6 d#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 B, e- u: n' l4 k! ?( @" ]
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% L3 o3 e0 a8 [' B# p* i/ ^2 j- F
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 J8 e: v/ k' ]# z+ `; \) q9 v
" q# w+ f! U. O. |$ v3 F0 M9 V% q/* assign the tl som board LED-GPIOs*/; c1 h( @. K9 L9 ]2 n: w
static const short da850_evm_tl_user_led_pins[] = {
9 k5 c, } z# r$ y" N* n /* These pins are definition at <mach/mux.h> file */
1 A& _; K7 ~! ?, j( ?' F5 w DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- }+ s3 L! }. k+ d: M
-1 o( Q! I6 `) B+ A" E* V# U
};4 q" D; P$ a6 p+ L6 n
7 L3 F3 ?- V! J+ \: X' h* Z. l0 sstatic struct gpio_led da850_evm_tl_leds[] = {/ R0 |+ N. Y: }
{8 Y' B' ^3 X! m: |" q* ~
.active_low = 0,
' r0 j+ ^" g! i5 l$ a6 E. u .gpio = DA850_USER_LED0,
/ y' c8 S5 p# H a) m .name = "user_led0",# h3 w" C- W; X; c
.default_trigger = "default-on",! _6 O2 V# {1 P k+ A" h) N W
},( e4 P5 E1 \& ?9 p
{+ K g6 Q. q Z1 n5 s& a
.active_low = 0,
) d5 D* ?$ f, Y G1 [3 |) } .gpio = DA850_USER_LED1,' ~2 q% R+ h5 A! Y- \% R, O& F5 d; f
.name = "user_led1",5 @2 \. p5 ^# ]
.default_trigger = "default-on",
2 `' A1 h7 _( N7 ? },
2 p h( [* o$ H' Q( m8 v {
7 e/ Y; b2 E( \8 R: ^8 T$ ~ .active_low = 0,
" F( g0 u [$ a5 f0 Y L .gpio = DA850_USER_LED2,/ O$ r E j6 W9 ^' b7 k: k, x
.name = "user_led2",+ g+ {+ |8 ]2 \4 o
.default_trigger = "default-on",. c: I* V, p2 r1 U! ^
},
4 }% D) E/ K, i0 A$ v {
1 G" w: q5 h# p+ Y" [7 M% v5 P% `+ E .active_low = 0,
) Q3 z) H7 L/ p: ? \9 f .gpio = DA850_USER_LED3,
/ V* u$ _- j! k$ n- L+ S3 K+ L .name = "user_led3",; f2 l) h7 `6 u+ M# Q" t1 Y: B
.default_trigger = "default-on",
. o( A2 B8 D4 U4 E. _6 { },1 z1 O! ?* L; }2 e9 F2 r# V1 A
};
$ ~. Z1 v* U! Y# ?5 T1 \( V* {! j6 \+ O3 u# R% c" i1 c
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 K' }- T1 G4 K6 |3 t7 `; ^8 s" b .leds = da850_evm_tl_leds,
* e1 n5 Z S' Y" g .num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 j+ @. g, M$ O# ~% I5 ^ {. A) x0 `6 O$ {
};+ v; G3 {4 r U9 ~
$ Y2 O9 X/ ?3 ^" {. @- u6 g
static void led_dev_release(struct device *dev)
. R+ g" V f9 M/ W" H{
! F c0 B9 O" d0 {};' j, w1 L+ K \" N- Y1 U
7 |! A% D8 ~( r0 g9 H4 B7 |
static struct platform_device da850_evm_tl_leds_device = {
( y* h, {% Z9 T1 K$ d .name = "leds-gpio",4 ~7 K( l h" @6 l8 ~& c
.id = 1,1 f9 Q6 s( G/ {) v1 { k! O
.dev = { y* ] W& q9 }6 D/ S2 I) X) S
.platform_data = &da850_evm_tl_leds_pdata,
/ h; V$ a" u1 @6 l .release = led_dev_release,
+ B7 c& Z; n& L& q6 h* {- E* K }
3 b' Q9 [& j6 {9 j1 q};
1 E1 l) M* x( z% f: K. X; |& `* i: x& d; V2 L' G
static int __init led_platform_init(void)0 y1 c( t* V! G7 B# E
{
6 v2 P$ I2 ~. {! H8 o int ret;
0 v! ~& n I1 e( E# d#if 0
5 C+ B' b& u8 ~% P( J7 L$ E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: N7 `9 [. O0 N z
if (ret)
; S8 [2 s7 Q& d$ ^3 s pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' S8 `: B3 v ^& X9 U+ ~& I
"%d\n", ret);4 d0 ?+ H) Z a6 X8 m
#endif9 X3 k; Q. m" h) d$ g# w
ret = platform_device_register(&da850_evm_tl_leds_device);/ {8 _+ {/ f- s }- G/ x
if (ret)
- \% \& ]5 N1 q) `" S pr_warning("Could not register som GPIO expander LEDS");5 [$ F8 J/ U( S h( k$ ^: g
else4 K6 _. i1 T! t
printk(KERN_INFO "LED register sucessful!\n");- ~- V! v2 E5 Z* U
7 k, V+ B' |% R$ [" H6 w
return ret;6 F/ o6 L5 \2 ^0 M: r( k0 ~8 D" u
}
8 J: A. U& f& X1 m
! x- f3 U2 o9 ^% E% q: zstatic void __exit led_platform_exit(void)8 Q {6 k( `9 Q8 D+ k3 X' B
{
2 x! u0 B" V3 Q K$ r, a e5 l platform_device_unregister(&da850_evm_tl_leds_device);
- D3 v0 I4 i2 g# @& d8 O$ ]# k$ M+ S
! v; v( M6 b; [ T g" [) Z4 P printk(KERN_INFO "LED unregister!\n");
+ P! g9 y- r: M' V}2 J5 P# \8 }2 y7 p
( D" y8 g* H5 V1 J+ C% umodule_init(led_platform_init);$ h6 o0 W# W/ t; S9 ^; O& T$ n
module_exit(led_platform_exit);- z" c7 {9 C' G' t6 _
. ]7 j. j8 p& b3 B8 A4 q( jMODULE_DESCRIPTION("Led platform driver");
D+ @9 ^% ^1 P* p3 XMODULE_AUTHOR("Tronlong");
' x, r( y" x& j' v5 ~$ \. UMODULE_LICENSE("GPL");
, p" R6 x' f% x, s
$ J8 h# P. P/ R, S! F |
|