|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 R$ O! b m* m
#include <linux/init.h>
: L |( U' A1 e# g, W8 e% z#include <linux/module.h>
+ Y6 W/ R5 w! E' U8 }+ \#include <linux/kernel.h>8 C) A4 A" `& N) w7 M8 `( O A
#include <linux/types.h>8 n2 s5 |0 z4 E8 Q+ B
#include <linux/gpio.h>$ K9 S$ V% w9 g/ H4 S- i) C
#include <linux/leds.h>
+ ~+ W" W2 [9 q% P; m6 b! t#include <linux/platform_device.h>. {9 E6 s2 \* ?8 |3 G9 l
( ^" r6 Y" ~6 Q1 j! |1 F
#include <asm/mach-types.h>- v% ]( U* a! a
#include <asm/mach/arch.h> q# G% W' K: U+ W3 [: X
#include <mach/da8xx.h>
4 V$ U+ Z! Q+ G+ Y) s) P#include <mach/mux.h>. Q' q: {9 e" ~
9 M$ e- h$ g6 T8 K& _1 a5 R$ k#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
^5 F' }1 l/ g6 p+ y0 ^9 x#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) G# h' B5 u% @% v: H9 k% K
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 \- X4 g2 w' M9 d7 s
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 `0 q' \5 \9 H | f9 q& M
% [0 ~% |" L5 p% C5 y/* assign the tl som board LED-GPIOs*/# l) s. m: k: J1 k# Q f: F% g1 k4 b$ b
static const short da850_evm_tl_user_led_pins[] = {) f) d* ^+ q3 g& g9 I4 E6 y
/* These pins are definition at <mach/mux.h> file */
4 { ? S9 a3 ~' w" |7 Y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! P, L6 a- ^+ Z6 K: `" G2 z$ r
-1$ \- G5 S& Q+ ?4 }7 Q5 N( _
};
1 d* E6 ?" q2 B+ j6 l9 B! q. [" p7 Q& ?2 X
static struct gpio_led da850_evm_tl_leds[] = {
2 e' @- l8 |2 w, S* c8 W {! a4 \/ R0 ?; H3 G
.active_low = 0,6 u: W; [: j: I$ S" {
.gpio = DA850_USER_LED0,. T$ K* o$ E {- J
.name = "user_led0",
% J/ X* j$ N ~ .default_trigger = "default-on",
6 Z* R% |# |+ N1 q },/ K( t% ~9 @3 S
{! ?" {& s) y$ N
.active_low = 0,4 \& [0 b6 ~9 g- b0 E) d( y
.gpio = DA850_USER_LED1,
+ _2 @! D6 \9 A6 R* ?$ k' P .name = "user_led1",3 z. q' s/ M6 C7 Q( b7 G! w+ N# o
.default_trigger = "default-on",
( K! R' ]5 @- G. a }* }9 ^9 i },. K* n1 M. z/ H9 `/ j# [ L
{* m& G5 v* P7 d( L! j, R" {) O
.active_low = 0,: M0 W( Y6 y0 A0 F# Y a7 c5 l$ q
.gpio = DA850_USER_LED2,( T {8 t \4 U0 h/ r* V
.name = "user_led2",0 F7 N* _: H5 f8 @' @
.default_trigger = "default-on",
' s5 z" m* O: j },% y! _' _! r# N9 j- F# c, `
{
9 x2 f1 g! i) l, v .active_low = 0,) Q7 d% q8 _. M$ E% Y- u0 M
.gpio = DA850_USER_LED3,
) o' G) W& R" \5 P2 O! [ .name = "user_led3",7 m# i Q: T0 m
.default_trigger = "default-on",0 |( \" F t0 _' E$ ~
},
4 X. m! w! j8 b7 h! k};; ~% i u9 X5 S6 u
) J) y$ }$ s" L: d
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = { W& h, u( T0 l0 c0 ?2 \
.leds = da850_evm_tl_leds,: _; x9 U- V) l3 ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 W6 o+ F: q4 p! O; l3 }};
6 `1 ]9 m+ |* \5 u
. U, @" Y2 g/ |3 e, ?3 Ystatic void led_dev_release(struct device *dev); M/ t; H# L$ m5 P3 q6 E5 _
{
$ q' E7 n" }# q};- x. D- X! }8 S& Z$ B
9 E/ V' o9 j1 G
static struct platform_device da850_evm_tl_leds_device = {! Q) b# |8 Y$ J
.name = "leds-gpio",' ]4 C# R& O1 H# ]9 o& W4 B
.id = 1,' ^4 O* ]: @3 `% m% q
.dev = {& Y H0 P$ b0 B9 E4 ]: m5 T6 ~
.platform_data = &da850_evm_tl_leds_pdata,) E0 r; l6 S& C) n5 H3 H: E
.release = led_dev_release,
% m, m. G- [6 I" @ }
8 C( r# R$ Y/ @3 M7 `' R};$ V8 c" A+ B9 v5 @# f2 c" o- p
% b+ K% m, O8 h @3 a: w* O
static int __init led_platform_init(void)- k7 U1 N J# W- M8 K: X) ?! F5 U
{
2 f- z& q% o) E5 v1 w! `. \. m, l int ret;
y" O2 u$ e( s6 Z U#if 0
0 l& J( P, y/ U( }! Y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); A& M @% l/ z9 f4 b" D
if (ret)
( I0 h f' }3 V$ ` pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 s* }. [# K% W8 n) ? "%d\n", ret);* I. x5 b+ w- y: W1 D4 ?# J# n
#endif# F1 V# j7 h, I' _# T
ret = platform_device_register(&da850_evm_tl_leds_device);8 L' K5 \' G% c" N# s
if (ret)
* `8 ^) N6 Q2 V* X4 B( G pr_warning("Could not register som GPIO expander LEDS");" Y7 Z; q3 d2 Y
else8 E9 g- P5 N- ] G! D% q
printk(KERN_INFO "LED register sucessful!\n");
; l# |* u$ p+ ?; z" V# V0 w' s7 _; T; b* }5 t5 U, \
return ret;
1 g0 Y t, v' C4 i9 D' E}
t1 T5 `# B/ Z* |" R' { n1 G" _/ W" S
static void __exit led_platform_exit(void)
% L9 e% @/ l9 D2 h- {{) n# y3 t$ I0 P2 F' [
platform_device_unregister(&da850_evm_tl_leds_device);- k+ X( O/ e, O( M
6 C+ i. T& f4 }& A printk(KERN_INFO "LED unregister!\n");# p d ]3 z) v7 k+ ~% d
}6 ]# |0 R( ]9 ^ b
: e/ P) _- E0 A1 m+ m
module_init(led_platform_init);
4 m0 r# v' e- h2 r' M* Cmodule_exit(led_platform_exit);5 p% _4 N: v- ?4 b
; s' c- X- C' ~0 v; r
MODULE_DESCRIPTION("Led platform driver");4 {8 r$ w& @0 n
MODULE_AUTHOR("Tronlong");
0 J5 U4 ]5 D+ K' |8 G; C& G, {* PMODULE_LICENSE("GPL");
. G0 q R# C8 r- E0 E0 N& g8 m4 ]8 p* F4 T# L) d) t' f
|
|