|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
: ?' f! f; r/ \" S! i( d, g#include <linux/init.h># t) B; Q2 i8 e [
#include <linux/module.h>2 y8 G" X& J% h. b! ^; g; z( Y A5 M
#include <linux/kernel.h>/ F; ^6 \9 J5 F) `
#include <linux/types.h>6 ~% T, I8 G( z: H6 `
#include <linux/gpio.h>
3 Z& K; W. S* H3 S7 X7 p#include <linux/leds.h>
, s2 T! q% N0 v1 j#include <linux/platform_device.h>
4 C' V6 u" f, | y; }2 ?
2 u4 Z( i- ?% @( [& H#include <asm/mach-types.h>
- D' p9 V' y/ c, f#include <asm/mach/arch.h>* n5 ]' g; j: ^" X2 F
#include <mach/da8xx.h>
6 ]$ E# N1 \) v7 q#include <mach/mux.h>
/ z- Z( S! ]" H/ M2 l) _' i3 B: t9 O" p5 |( t' g8 H
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# `. f* @ F9 G9 L- R
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( z6 k& L5 w H2 J+ k4 g6 R0 | O
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 t( J9 J( i% s! _3 K#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" [) {4 c8 z7 l/ o! T
5 p: `0 ^( e& @' D1 I2 |/* assign the tl som board LED-GPIOs*/
9 k X* J, p3 A. t1 ustatic const short da850_evm_tl_user_led_pins[] = {
5 `# y9 i7 C# l+ U$ P# X7 t6 \ /* These pins are definition at <mach/mux.h> file */6 ^+ ?3 O- F- ^, a1 [
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' H( G6 i5 P2 Y# `- [- \+ T; j0 p2 [ -1& n7 A3 _2 [: n& K: N$ H* U4 X
};
4 s% o- V( n8 u( c) Q; v: F
, B* U- O+ o4 v5 t8 z& D Astatic struct gpio_led da850_evm_tl_leds[] = {# f" m+ }# V( H
{" o. }5 d8 A6 G
.active_low = 0,
- b4 ^+ U4 e2 T1 l; k .gpio = DA850_USER_LED0,$ G O) q$ t3 V) K
.name = "user_led0",
2 ?+ C1 p* B1 ]1 Q8 P" p( k/ w .default_trigger = "default-on",# [* e3 L. s; u# `* l; p0 p
},
8 F! Y7 ?/ N- N6 F2 D( J {
0 R, O$ p" ?/ @, n9 q .active_low = 0,
9 w% L" [9 r# C. R o1 |8 n& T- q .gpio = DA850_USER_LED1,
& ~, H! D; J0 E8 ?) ^: d9 ^ .name = "user_led1",
- Y- w9 Q3 A" X2 G* [. H .default_trigger = "default-on",
/ R7 n% P' a: w- x" ~# o3 k },
+ Q4 X7 Q i! r+ _+ H' ^ {3 p9 @0 g$ D( v. T$ F. i# J5 [
.active_low = 0," @, h1 ]2 b* J0 r
.gpio = DA850_USER_LED2,
" x( M! C7 g2 ~" ~9 ?3 l" o .name = "user_led2",/ Q; U6 O$ T/ y
.default_trigger = "default-on",
4 s9 p6 N( t9 @ },7 }( l! ^3 ^2 _! P
{8 N& o# O( \. _, F
.active_low = 0,' C* C1 B$ e) K# N
.gpio = DA850_USER_LED3,: Y B! t" z5 i! u* v9 r3 S
.name = "user_led3",9 ?9 E$ V: x B+ m
.default_trigger = "default-on",! L6 M H3 h: L/ ]+ B8 k3 Y* ?8 \
},
! N) X' n8 l- _& G};
; \9 Q. [# l1 K/ S7 i1 o; _/ b, [2 i; Q0 d2 K2 \. T
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 u/ f7 f- I0 c: U! s4 L* c .leds = da850_evm_tl_leds,
+ Y" w: M% d0 ^' Y, k; b .num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 x' w/ ]4 A. x4 C4 ^; C2 y$ w5 E
};
/ ^7 a' G! |& W+ \- S8 l$ @) r+ c( q. |1 x J2 r
static void led_dev_release(struct device *dev)
- g7 u- F2 _* |# C* s# r{
" O9 ^' D# }5 R0 w6 U};
' t6 u5 @: ` K, a0 {4 t! d. {3 X
static struct platform_device da850_evm_tl_leds_device = {
# X) G# i' n! D% } .name = "leds-gpio",
# V) e; Z7 q5 A .id = 1,
8 c7 l6 ^. k |' _/ C/ m$ {1 u .dev = {0 P* j. M- {0 z# h1 A) Q& H
.platform_data = &da850_evm_tl_leds_pdata,' Z3 h! E- n$ t5 E H C
.release = led_dev_release,
+ ~+ {( n/ V) p _: ^, F" m }8 ~( Q: n/ a' i; C8 n5 P; m2 q
};
! ~ O" Z. F, B5 m a0 l# q' U" x' ^4 X) ?) A8 I
static int __init led_platform_init(void)
6 n2 I- I7 i# D+ W: d{
6 [4 I( g$ _/ B! k( C$ [ int ret;8 R/ R4 P% w6 B6 Q
#if 0" i! D1 o( W* g+ l3 s
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* k4 j$ z+ q T( p
if (ret)
# S3 [4 G( S" @5 Y; {6 c. s9 d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 u7 m, K, I9 c6 e+ x) `$ ~- a# ^- a
"%d\n", ret);
& |( _) e" ]& l' L4 b! V#endif
6 w4 [; g, Z( `1 P; a% } ret = platform_device_register(&da850_evm_tl_leds_device);) i% { d5 C& D# V& \$ O( o
if (ret)$ @! h0 o( q' w6 }- ]* ? F, q
pr_warning("Could not register som GPIO expander LEDS");) u; O# V+ t0 x, s9 ^0 s4 Q
else
* G, q7 r4 t8 p0 p8 U printk(KERN_INFO "LED register sucessful!\n");1 k$ w) U: [7 Z6 L$ U- f; ^0 H
. U$ L5 j" ~* r* l D return ret;3 k6 |9 V1 M3 N
}
9 v1 s. B# j9 m1 z6 M/ T! t# _( F+ u! h0 O/ _- o! s
static void __exit led_platform_exit(void)
8 E0 t" }& }! ]0 j" L{& w- p. P# o% \ K1 _6 \. Y
platform_device_unregister(&da850_evm_tl_leds_device);
0 m' _. J! N8 B3 c, g
& e7 Y- R6 T6 x6 U8 ^ printk(KERN_INFO "LED unregister!\n");
# f2 L r% l. P. K}7 |0 q. J. k' Y j. z
0 q9 v- t: a1 |( r, dmodule_init(led_platform_init);" \& }/ a9 f+ ~0 @
module_exit(led_platform_exit);
# y2 ?3 Y* o; h( ]- \6 x- R- S2 i4 K0 `# L& x$ A, z) w
MODULE_DESCRIPTION("Led platform driver");
" [- |5 h- y/ u u( }" }MODULE_AUTHOR("Tronlong");: D9 \( V& z9 Z1 q
MODULE_LICENSE("GPL");
+ V0 Z/ T* g7 J0 b* l' o+ h& n* Q" `4 Z* f/ V4 c' l
|
|