|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# [5 q* h1 G$ m0 u* b6 C8 @#include <linux/init.h>' V+ `2 O$ W7 l5 H
#include <linux/module.h>2 ^4 D6 \9 ?2 O! A
#include <linux/kernel.h>1 b. V: O' I, R) ~4 |4 u
#include <linux/types.h>
4 [9 G1 Q! ^4 Q( @" ^# `" m#include <linux/gpio.h>8 e9 ^- `; y- d, h
#include <linux/leds.h>
4 y) q" [* h3 U. y2 j' x#include <linux/platform_device.h>9 h3 `5 i# u; @+ Q6 k; [
2 s4 `+ v9 y: ~
#include <asm/mach-types.h>) O3 t6 D+ h A8 M# v* u
#include <asm/mach/arch.h>
2 I6 r2 T- l6 O% ]" m! l#include <mach/da8xx.h>
$ [$ V" [7 G3 F# ?2 J, }! l7 L1 s( H#include <mach/mux.h>/ y6 A$ Y, Y `4 e0 ^! v
% |% |: [' l- y. s: P
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! m! x: A) `( J5 }9 y' Z$ N
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) z, R: |) f; g4 ~3 s8 m T k# ?$ A
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); N6 D& N, v+ s5 k; W
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ \* ]) F; l+ G& _/ t2 Z C
4 ?/ ?4 v; Z3 C, V3 R3 P
/* assign the tl som board LED-GPIOs*/
* [: R3 v2 G* c+ V2 H `2 ystatic const short da850_evm_tl_user_led_pins[] = {
9 p9 Q1 |4 P. M% O2 ~ /* These pins are definition at <mach/mux.h> file */
" d$ N* r2 H, w) k DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 S5 w. U' Z( K! L6 z, C2 [/ B0 R3 K
-1
- p3 X& M9 m% v( k- V! c7 V};
6 |. Q2 t. c- g# A# r3 G
9 g a0 `2 b4 _8 V5 E0 \static struct gpio_led da850_evm_tl_leds[] = {
; D$ V0 N/ k7 e7 t {' `3 g+ T s. M9 Z, L) o' L2 t% B
.active_low = 0,
6 g) d$ K3 e% U4 [; d .gpio = DA850_USER_LED0,; @! T& R" b" g$ y A8 m* x
.name = "user_led0",
9 C5 C- N: z5 ^& h5 P4 n .default_trigger = "default-on",& m. `8 v/ M. V& B) G. H
},
0 u0 K" p8 T- Q {8 t7 f0 n/ V5 }/ W3 n1 a6 r) r9 z
.active_low = 0,
. Q1 |1 M9 n0 d .gpio = DA850_USER_LED1,
! u, E+ {5 v: x6 A .name = "user_led1",4 q' K) |- V& c4 t3 C
.default_trigger = "default-on",$ Y/ e2 K- H: `% {. z( U
},
8 A2 b+ Q' e. U* T+ ~ {9 w7 ~0 [. e4 V% i3 [" x7 k9 M& _
.active_low = 0,8 }$ e2 _8 e* p+ d; n8 c8 U
.gpio = DA850_USER_LED2,4 s: v1 [& i7 ~
.name = "user_led2",5 W) @7 @' D8 z$ Q1 S
.default_trigger = "default-on",
. O8 Y7 u6 @' m, n }," W. M1 l& t4 e# [' I) ?8 i
{& n% r. h4 q' h' I2 a
.active_low = 0,
' c# d! @6 H0 k0 H .gpio = DA850_USER_LED3,2 Y; ~+ K6 Q" a) j# m& t
.name = "user_led3",7 E$ Z# O8 S- o. M2 R$ `2 J; y
.default_trigger = "default-on",
3 W9 m7 @8 z4 O1 A+ d7 c },
+ L7 k) A4 j" _- N1 B};
, q, t9 I0 B. b! G) v, q
9 K% q/ Z$ e0 B( E, lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' g: N0 C: k4 c y# y( t4 q- q6 D .leds = da850_evm_tl_leds,
! k+ _: f* G* V. ~/ R/ D .num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ q% o& c, \: B) S4 t! n
};9 C0 m" e2 |! V
7 V* _9 T2 C7 J, I7 M6 |
static void led_dev_release(struct device *dev)6 d; G! f- `9 y( Z- F3 {
{3 q9 ~% u! w$ U1 N, P
};, I& d+ s4 _1 w/ h4 t4 u. l& t
w3 F( n8 F V/ N* y# {1 dstatic struct platform_device da850_evm_tl_leds_device = {
0 g; _8 x" B+ l1 ` .name = "leds-gpio",8 v* ]8 l# x0 z+ h& V
.id = 1,
6 {8 T' x3 B6 w2 ?$ |! h .dev = {3 k) _# {1 Z& J% m# G% b
.platform_data = &da850_evm_tl_leds_pdata,
. i" Q$ m4 r* q& Z3 b .release = led_dev_release,
/ k* V4 x- o6 s) \ }
4 k1 C3 Z8 s s. E7 A y) x};
7 t( g% w4 h! I, d0 k
" e) O, o: @' J7 L# W2 Q ]! bstatic int __init led_platform_init(void)
}7 V5 \4 t/ |$ y, V6 f{' n0 E- L2 s3 Z$ e) Y$ d* e
int ret;
- G2 B+ s: J5 k: x# Q( B#if 0
' l8 X, A8 C" _4 b# a. o ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 r4 ]$ ~8 ?8 N E F; h$ \* `0 H5 l if (ret) J- n: o% A# i6 _+ E% g' |, f
pr_warning("da850_evm_tl_leds_init : User LED mux failed :" \$ ~, K, [: T( V# e
"%d\n", ret);
8 Q. m# g( b3 g/ E! S#endif
6 s) `/ A7 Z7 X ret = platform_device_register(&da850_evm_tl_leds_device);6 G R! R6 h( [$ p0 ~
if (ret)
; q' n" J: p6 j pr_warning("Could not register som GPIO expander LEDS");# t! u( x- b2 R3 u1 I' j( C
else! @5 W2 y4 K: {" [9 j: S; ]# Z5 E
printk(KERN_INFO "LED register sucessful!\n");
4 W$ U, j! U! P- f, h1 i( G8 \* \
l8 Z" C! P* [& b+ } return ret;
* a) {" S' }) o}
|$ |9 x) y& ` m+ S0 K8 |/ ]5 @) W* `5 O# G0 e
static void __exit led_platform_exit(void)# o+ I, Y9 `$ }' Y- d) o% b* A# s- R
{
. E& w1 x0 D) | platform_device_unregister(&da850_evm_tl_leds_device);
* s. C! P# w+ ~& W
* P. H) r% X( A4 \2 \- ], B x printk(KERN_INFO "LED unregister!\n");
; h L; v+ v9 [7 P! }' V}
3 C( ?( R% i8 O) D8 W( m, `9 |( K2 m' f& I& B; s0 g, e! S
module_init(led_platform_init);
6 ^- d! n( k# m' \module_exit(led_platform_exit);2 F# S" _7 ~% v5 l. P
/ j7 P& Q4 K( n2 Y6 `MODULE_DESCRIPTION("Led platform driver");% R( x j. b( M0 Y
MODULE_AUTHOR("Tronlong");
( s2 Y% _2 F7 `8 ]4 kMODULE_LICENSE("GPL");
5 U& i! h1 M9 s, K! O/ R( ?0 M7 r) s# N1 K3 S4 X% q
|
|