|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, N, q) n0 P3 N7 Y0 x& g3 g#include <linux/init.h>
5 c! h2 Q% O2 w* z7 ?#include <linux/module.h>
1 I8 l5 A E( A1 E4 C* t* {: I- |#include <linux/kernel.h>
4 R. ~$ G0 ?% ~+ i4 j#include <linux/types.h>
0 B$ @' D& O! n1 W1 u% q#include <linux/gpio.h>
3 D7 c! L. V2 t#include <linux/leds.h>
a. L C. \0 E. F+ i. _0 }#include <linux/platform_device.h>
9 G$ j& I9 a: p/ H0 f( C5 C" F% a. P
#include <asm/mach-types.h>
4 s. e# r$ I/ C: E' D#include <asm/mach/arch.h>
' M' C3 X6 J. v" y; R' U#include <mach/da8xx.h>
2 P+ z* o' _5 P#include <mach/mux.h>% h+ m* S# t' y" ?! L
! Y: ?8 K4 A7 H8 J$ K/ ?% V1 b
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* W8 M' o8 `) o% G+ J3 A#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 `% r9 R6 h; m) P: ?% b
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% u& ^! g( }+ S, C2 j#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" G: `& Y! h, e( b7 w+ f% A" }" @) P! m# a1 r( O; G9 D
/* assign the tl som board LED-GPIOs*/
7 _# `7 z* b, A8 E% Ystatic const short da850_evm_tl_user_led_pins[] = {# _& d* D0 _7 R% n
/* These pins are definition at <mach/mux.h> file */
( w; `8 f, C% l7 M. y6 o DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ M: [8 P4 ~7 K' }7 _0 r& e
-1
2 W# D# [% D" ]7 n3 R};
8 i6 e0 W; |" I2 ~- U+ p+ T) i+ C2 B4 } u7 N2 r7 @
static struct gpio_led da850_evm_tl_leds[] = {3 A; a' K, }$ c5 R4 k1 x
{
! V; }* N: Q4 r2 N8 \1 ^ .active_low = 0,0 V+ w6 v7 d% Z) ]. T
.gpio = DA850_USER_LED0,
. ?. J" B* o& S5 u) h .name = "user_led0",3 j- r/ q9 Q7 Q1 z2 ]3 o5 S
.default_trigger = "default-on",& c( g' u! [2 c1 L* p
},
6 q0 N3 z) S. H3 b3 K; g4 d4 f# A4 i {
# u% T- ]6 z) p Q& ^& t4 n .active_low = 0,5 w9 W. w' p! ?" o8 f( O5 S
.gpio = DA850_USER_LED1,0 T- w" J. y/ j" P+ M: {0 i
.name = "user_led1"," @( g% [3 E' J/ P
.default_trigger = "default-on",2 h* J- P ^: q V
},
" \# l& m) }" T' q& o {
# m0 o l3 E8 M4 n2 t3 Q .active_low = 0,
' E R) U: u5 O .gpio = DA850_USER_LED2,6 `# F9 u% D" ^0 E
.name = "user_led2",
: ]! Q/ L1 B4 I4 z% v9 L7 h .default_trigger = "default-on",
8 {7 d( x4 a5 \9 d },
% p F# W3 @7 T, x, a {, I9 b7 z9 x+ k5 f6 {$ K4 V2 S
.active_low = 0," N% [8 `8 a- o+ w2 n
.gpio = DA850_USER_LED3,5 E9 c. O7 e# G7 y6 q4 N
.name = "user_led3",
5 C: ~8 P2 S3 d4 K; V1 q# `4 d' I .default_trigger = "default-on",
, v+ @" U4 c4 o: U },1 d6 P( e2 _2 f6 j
};
: s2 r# L) H3 { J7 a) H' N
! h6 L; z5 j h Z5 A0 X5 Pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
5 `$ r m8 U; F( h .leds = da850_evm_tl_leds,& W2 B1 G% {1 U6 O* m6 u
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' I9 r5 x3 m/ F1 R+ `1 {3 H};
- r' y0 y% z5 p. h: A# [: E% l8 B
! n2 |& U6 D/ T* B- j3 xstatic void led_dev_release(struct device *dev)
$ l% t X$ n. d{, N" g6 }! J4 d2 ?! j
};) ]% k! @5 M% H, A1 D* ?" K% [. k
! L$ e: ^* ?2 Z- z; Q J6 I0 B
static struct platform_device da850_evm_tl_leds_device = {- ^4 ]: |% U9 U+ [
.name = "leds-gpio",- m+ Q. N. O; t% l& `- s
.id = 1,
/ t+ E0 O4 f, b* \! C .dev = {
6 M; o# [; L" n1 [4 G .platform_data = &da850_evm_tl_leds_pdata,, X# z, \9 _' y$ E
.release = led_dev_release,
! h- P3 d1 e4 S }
, J4 i' y+ b1 z};
0 M* R; `/ n. m+ {3 C$ q; Z& p! ]* B& i4 E" P3 Z% I5 M
static int __init led_platform_init(void)
0 s8 n5 Q4 \* E+ K7 F6 w7 t8 {* J{8 m S/ A( I' {' v0 m: `" _4 C
int ret;
+ o& F* K5 S/ L#if 06 y; g& L1 z4 m0 O' U) n; k( ]* O
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# o; Y! v9 ?" v, Z2 J
if (ret)
, q0 u) R4 L+ N pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) S% R8 B4 ^: O1 l3 { "%d\n", ret);4 M1 N* t3 o% z2 _; Y
#endif
{- W; M/ G @ B. v+ ?$ C ret = platform_device_register(&da850_evm_tl_leds_device);
3 ~* s3 l8 A+ q if (ret)3 @8 a" x$ J+ @" c
pr_warning("Could not register som GPIO expander LEDS");0 B' W! Y' r/ o$ b$ g
else9 f/ y; k9 H: h- l6 {9 \! y- z: p
printk(KERN_INFO "LED register sucessful!\n");
8 K \* B/ l f( J) D) S. b% z- T8 q! F$ R
return ret;3 C& w) u$ w& ~7 K) ~
}4 t; r) h0 O; p- I- g( B0 y8 j
7 U1 t" r, x3 W3 u
static void __exit led_platform_exit(void)% v9 j8 k N) N. P3 ?. R% n& ^
{2 f% f: u$ y) l7 B; Q' N8 v" u: g
platform_device_unregister(&da850_evm_tl_leds_device);
# H/ @* V* H3 U4 f$ m' o% S8 ~- l; h7 l' d
printk(KERN_INFO "LED unregister!\n");
! |" n5 u. K3 n$ y}/ `" {* m7 Y2 N) G; z, G# v) l
2 b5 b$ F+ p% N( wmodule_init(led_platform_init);- r) R1 N& Q5 B
module_exit(led_platform_exit);! ~' {: O K% ]& }$ M, \9 [% H" [
7 v/ j7 D' X3 f/ VMODULE_DESCRIPTION("Led platform driver");
/ S: n: [& j1 TMODULE_AUTHOR("Tronlong");: U$ v! e6 j& D* V5 w" v! _
MODULE_LICENSE("GPL");3 ~6 f: |' X* n
' P6 y1 |- s& l1 A b
|
|