|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 C& X( [& k5 F/ ]8 J' l$ |% d y
#include <linux/init.h>
; h; X9 F/ [/ c/ U#include <linux/module.h>8 L$ Z7 x1 ]5 n. u5 q
#include <linux/kernel.h>
6 L. q _( Z& B3 u/ O#include <linux/types.h>- T! X0 j, _6 @! S% N& S' t4 N- V0 }
#include <linux/gpio.h>+ @2 V+ N* y/ V7 t2 i0 P: o0 x! E4 N
#include <linux/leds.h>
; u N6 l$ D# J, I* b1 V" E+ h7 X#include <linux/platform_device.h> t M9 J% X! f1 k2 A) ~& J6 H
# I: t+ E* Y$ o' B; r% l' z# U#include <asm/mach-types.h>
2 ?, W& M/ Z( v7 F#include <asm/mach/arch.h>+ E0 y1 w$ M! R# R
#include <mach/da8xx.h>+ m" I: n6 o, x1 M) h. m
#include <mach/mux.h>$ r8 g% ]; t" R* [1 r% P
+ q+ ^' }+ ?7 b2 S( z$ }. ~#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' M1 s+ T2 y6 Z+ ]6 P( B
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 ^7 O. b. n0 |: K
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. I" N' {( @& ~0 N#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 g/ g" z" i( A$ e+ u
' ]+ s) x5 g( a# f/* assign the tl som board LED-GPIOs*/6 E8 x7 I; O2 Y0 h+ v4 q3 M
static const short da850_evm_tl_user_led_pins[] = {
. l6 j3 F# z3 t3 t# Y" N- V /* These pins are definition at <mach/mux.h> file */- ` T2 ^& Q# Y* @8 z5 M" |, F$ l
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( N' R# Y. F% l- b9 S -1
% X5 S! c" c8 W3 L! b};; F2 N' L' z- E! O; R3 X4 Z
& s; o/ o* Z0 v/ ^2 ?' K5 Z. @
static struct gpio_led da850_evm_tl_leds[] = {" i) }* r, `1 i* E" F% d _
{' r" \1 N3 B; q% m- m
.active_low = 0,
, F1 h2 J/ j; M& | .gpio = DA850_USER_LED0,
. A8 L; ?6 N% O$ ~6 }: q .name = "user_led0",+ Q3 P& ~2 ~4 }
.default_trigger = "default-on",% P$ |/ q# S/ J: I: T& e
},' N" F& P" A; S: N: P' l9 E
{
z, P% B5 T2 F5 T' J .active_low = 0,# a' L6 ^4 f% r4 ~2 o9 M( f5 w* S
.gpio = DA850_USER_LED1,
# z. L9 |( b/ K" k u .name = "user_led1",; L( T! a. Q, \3 o
.default_trigger = "default-on",
: w1 k( G+ C3 |% t: W) l0 i. y7 s },
" \8 K% F! g, [: p4 H {
: x7 Z5 y% Y* A! ? .active_low = 0,
% O! k/ E7 Z0 T' A- M$ G .gpio = DA850_USER_LED2,
h9 a0 h8 \4 g1 Y) k- f .name = "user_led2",9 ^4 ^$ [0 S' D8 B- J
.default_trigger = "default-on",
9 \8 a$ f0 h7 J: A% J },
$ y* z/ {/ ]" k- f& F) ~; G {
; q9 ]' E4 Z- }" U .active_low = 0,6 L! ^8 R) M' }5 f# o
.gpio = DA850_USER_LED3,
$ I4 s! T3 d. k' C" N& ^6 ~7 j5 D .name = "user_led3",
9 k! n1 }* U4 ?" a% {+ S5 V7 y .default_trigger = "default-on"," f8 S$ R3 ]/ ~' M
},
" ^4 l, M* ~. A! W};
4 L/ ~$ Q0 F3 M2 B9 F0 ^' d" X7 ~: Z& D" k3 i r' x
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' s% h& X. B) g. X
.leds = da850_evm_tl_leds,# z7 N! _" K% N4 b3 L
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 l( l# E4 k: M! U/ @
};7 r( e0 L- A2 d
& g( l' H" I/ u& ostatic void led_dev_release(struct device *dev)+ ?6 d5 T8 U+ \9 A" h
{' R( d1 \: M6 B" `
};9 l3 w+ {' k- |: n8 O
5 i; I0 `- N2 O0 y4 r [" K- q
static struct platform_device da850_evm_tl_leds_device = {
6 d$ Q: \+ |# h1 W5 C5 N' W .name = "leds-gpio",, [& J8 W# ^% I5 q
.id = 1,
5 e- f/ E$ u% A! ]7 B/ D .dev = {
6 _" ]; Q4 Z+ `5 V# X l" x .platform_data = &da850_evm_tl_leds_pdata,( J+ a/ Z4 B3 [+ g5 U
.release = led_dev_release,
* Y5 e4 N! u" z, K+ Q7 W. J. S2 } }
, v, s$ L8 Y" M; K};
7 |$ n3 G3 A) u( Q3 s6 c0 W8 Y) j/ V
static int __init led_platform_init(void)! {; l0 n% [9 W; m p* p( R( H
{; F) `9 A& L4 d% S6 w) c
int ret;5 B8 ]# N! z3 h# u" t
#if 0' B, z, |+ n( d- n" r* ~
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 i; M4 Q; z& c9 v, ?
if (ret)
3 r" i/ Q! |' f6 D. I5 U9 x4 Z pr_warning("da850_evm_tl_leds_init : User LED mux failed :": B) Q: _ ~7 L) e7 A
"%d\n", ret);. X7 |% J- ~. L" ?! o4 W
#endif, D0 U! A# _. R/ D7 ~$ ^
ret = platform_device_register(&da850_evm_tl_leds_device);
$ e; t9 ^) w% B: V& w if (ret)( E7 v: Z# b. h9 C" E* r0 b
pr_warning("Could not register som GPIO expander LEDS");
W. J& r1 Q; G else
# D+ J7 B% b, b# D2 d printk(KERN_INFO "LED register sucessful!\n");% `) T7 C+ U$ j. A
! G& g" A6 p# F) c, p* H# N" _
return ret;6 m Q8 @* s. f2 `/ Q
}
. b2 ?, c/ e* S3 Y7 O% O' S# J' p
5 U7 L* e, @) l0 j% |- u3 C/ Qstatic void __exit led_platform_exit(void)4 n3 o; m4 ]* V. [$ N' C
{2 [$ T7 X# U$ k2 B4 s$ D4 V: m
platform_device_unregister(&da850_evm_tl_leds_device);' L1 }. X- _( b Q( q7 ?
: d% {! r9 s1 `4 M/ r
printk(KERN_INFO "LED unregister!\n");2 ?/ K4 {- T* s V* h, v& r
}" e+ p% i1 F( W5 [9 |; i/ x7 G
- e8 ~7 M: X z6 G# Z+ Emodule_init(led_platform_init);
; f5 X e; }' w3 t$ k6 H1 a# Xmodule_exit(led_platform_exit);
e: x- F$ e+ l8 W/ J" z. _4 g2 o1 g" _( r, S# H
MODULE_DESCRIPTION("Led platform driver");) y% z" ^; E( n
MODULE_AUTHOR("Tronlong");
- P3 x9 f }$ u# m; t5 IMODULE_LICENSE("GPL");
6 s3 j( ` R1 E' {0 F$ ~3 x) k; ~" o9 g1 x/ _
|
|