|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 S2 u( ^1 ~& v; b
#include <linux/init.h>
+ O# _1 C3 n0 |! L( r5 e#include <linux/module.h>
6 W8 o; E) ?% @6 n2 ^#include <linux/kernel.h>/ w; o8 \( {( b2 n
#include <linux/types.h>
* W6 S+ w. {0 ^- G#include <linux/gpio.h>
5 U# p9 s$ k+ m#include <linux/leds.h>
% {' A" }# E a5 y( d* O: A#include <linux/platform_device.h>
5 U+ J2 \3 [& P2 ?5 q5 J: u4 Z9 `1 g8 ?" C, H5 u" m
#include <asm/mach-types.h>' P8 p! _( D5 x0 t# M# i3 ?
#include <asm/mach/arch.h>
: @: x6 q' t4 \#include <mach/da8xx.h>
* |6 `: F- k T$ t. Z; ^#include <mach/mux.h># Q/ n1 l. @, r4 C: \: X
' |: j( L) T# v( i
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). l& \/ f! Z# B/ c. Y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( P& a0 I6 ^; M J#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# n& n: [5 Q# ?: f+ l4 {
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" S+ L7 G& Y$ S7 D: G: ~) A( S) X5 Q
( Z2 H' A: Q# @# ^/* assign the tl som board LED-GPIOs*/5 k: B9 J8 P _) e& \( @
static const short da850_evm_tl_user_led_pins[] = {
' G) h% S/ |! H/ Z. I% r /* These pins are definition at <mach/mux.h> file */
7 T+ F6 q& T0 ^% z8 a% u p4 b DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ ]8 `; ^- ]: A- m6 m# J
-1$ S' [* _ n2 r) P
};
A8 P! N+ F+ ^0 |* x! l/ W4 C# Q- t! `4 [% T1 k. D6 h
static struct gpio_led da850_evm_tl_leds[] = {
: e% A4 V9 U; M0 f {
! O( P% B; \! _7 ] W .active_low = 0,
' v: P2 t5 f: }% m0 U! b .gpio = DA850_USER_LED0,; j2 W A' ~3 z# x9 B6 w
.name = "user_led0",7 N2 J& e& x# Z* m2 B2 r4 ~8 `; z
.default_trigger = "default-on",
& ?2 F$ s( G* {' F! Y! t },
/ m2 V4 u7 Y6 z. c$ k {
' u p$ U P: ]1 ^- s9 k# x) a .active_low = 0,' t0 _# i4 T* u2 G7 ?
.gpio = DA850_USER_LED1, A S6 Q9 ?0 t+ k
.name = "user_led1",0 X g" ~! N5 Z: V* `' `- j8 P
.default_trigger = "default-on",) A2 n% a$ T5 z2 F& q4 q \
},1 T0 W# i) Q3 ~9 \" I7 ^
{7 Y& Y' I- d% o Q: C' e% {
.active_low = 0,; }: G, ^; z- E, W
.gpio = DA850_USER_LED2,9 w3 l& `5 [5 z; t, Z
.name = "user_led2",+ M7 ^1 C8 l- z1 @
.default_trigger = "default-on",# Z7 U4 y- }6 M3 Q2 a, O
},3 ~' c* r( h% [6 g( G# C8 g8 Z
{$ H1 S, a5 g0 Z3 {+ f, m. r2 x
.active_low = 0,/ c" d/ x8 c T0 \# n7 }
.gpio = DA850_USER_LED3,, w8 Z& V: k @% ~1 E4 D* A6 R; u
.name = "user_led3",
% w3 h! R9 v t( v. {1 N .default_trigger = "default-on",. L( f |% ~/ G5 ^5 \; i6 H
},
( @4 m! z; T8 J9 G/ @1 V};6 r9 _+ P! F, s3 O7 n6 }- D
$ Z( f' V% M0 O) `
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( V: a$ \+ z. o' j. A" t5 Y1 ~
.leds = da850_evm_tl_leds,; i" q: o2 m$ z+ x& W B" v
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) T4 _5 o" l* Z3 C9 d# C+ z};. L, ?5 d- h+ k2 C" @
& ^: }- X3 [7 {$ tstatic void led_dev_release(struct device *dev)
9 h3 M4 H: s6 h$ l3 v: w{
5 h5 x7 e6 M- t9 o};' h4 x5 w. l0 s- g+ O4 ^) }
/ M# b& r7 H& H: E, K8 `static struct platform_device da850_evm_tl_leds_device = {
2 \2 C/ ~1 F8 A2 W( S- ?5 ? .name = "leds-gpio",8 ]9 n0 o- Q) G
.id = 1,
! t" g; U# a0 w/ z# Z .dev = {: B8 v' m& w9 A0 s
.platform_data = &da850_evm_tl_leds_pdata,
6 }# g, y2 d- r .release = led_dev_release,
6 ?) Q7 o' n& I9 r }" \( K7 J/ p, w( p6 k/ `4 i) f6 C8 S4 O
};
/ T6 [0 R& b9 ~
& D8 I& z: ?9 estatic int __init led_platform_init(void)
$ J7 C( i3 J% G; ]+ y2 m z{
1 Z9 M, W8 D) t9 R int ret;1 O" j3 } e, _, H. c
#if 02 }) H* h% o# U `+ A
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! V5 g5 Q3 {6 j. q2 a; V if (ret)* p4 i/ K- N! b4 E' g
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 G: ~* ?3 J$ A# q3 i0 N "%d\n", ret);$ c) ]" q+ U+ @8 f0 u7 z
#endif! t2 B% H7 U' O+ B7 [' k
ret = platform_device_register(&da850_evm_tl_leds_device);+ k+ ]' p+ t: {+ Q+ N( `
if (ret)
+ T5 @8 d. e9 c- K0 k pr_warning("Could not register som GPIO expander LEDS");
0 M5 l, ]/ Z' m0 ]4 a else
! ?# G5 ^0 b5 G9 z printk(KERN_INFO "LED register sucessful!\n");
6 J& B0 c& N: @& }4 n. X
. P0 H- g; Q9 r1 j w$ o) [ return ret;' s8 _5 e7 ]3 j$ C- I
}
. c0 Q' [, }8 W' J+ d& K: s0 C- M( ]& L; a
static void __exit led_platform_exit(void)
4 Q( W [* w# a4 [/ f{8 O' }8 m/ S7 |; q0 O
platform_device_unregister(&da850_evm_tl_leds_device);
# Y8 [4 z! q- L4 k4 ?
& X' O( @( z+ X# W printk(KERN_INFO "LED unregister!\n");
4 T) o5 T. e' g" p/ l* U- H}
. s1 L. {- W' \9 \6 s& x# W* G# S+ B" j; t$ x
module_init(led_platform_init);
. ~9 x1 E! {2 W, x! v/ bmodule_exit(led_platform_exit);
* A9 J" c' `, B+ E2 [3 m! c( T3 ~# s7 B6 O# w
MODULE_DESCRIPTION("Led platform driver");4 U* O9 S7 d, a, z7 F5 M1 h& L
MODULE_AUTHOR("Tronlong");
) K- W- y' i% y% F4 NMODULE_LICENSE("GPL");
$ _" u3 w! C q- ^6 f8 P% N$ |+ q9 G- n, E1 h
|
|