|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' A, u$ g& ]( _/ T* j; e5 c' b#include <linux/init.h>" [ d5 ?: @7 L( H; D2 i- j5 q
#include <linux/module.h>2 z* I/ I* V7 U$ o" v1 w' k* T6 B: T
#include <linux/kernel.h>
4 ]) z9 W# y1 N6 I5 v' U4 H#include <linux/types.h>
0 M* j2 M( u& A' |7 `/ `#include <linux/gpio.h>+ L' V. G v7 K
#include <linux/leds.h>
& L: ?2 n h% T7 v: y3 J#include <linux/platform_device.h> H' ^1 f# I4 M9 F
( L; X7 B1 e3 X#include <asm/mach-types.h>
9 [9 D: J: V' Q, J& c$ t#include <asm/mach/arch.h>
5 \- o# H( @. F: H6 y9 b& g9 U#include <mach/da8xx.h>
6 Y0 f1 X5 O$ |#include <mach/mux.h>
$ M# l4 U3 E" z! ?8 B# y& B: C/ a. y% w: y* [( B
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" N7 e& \% [2 q/ X& o8 u8 c
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! g, Z( f( v! N7 S! y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); w0 y* K/ A" P
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- U+ J& Y' \% n" u% Y" D" O% G2 p4 V" {6 S3 U
/* assign the tl som board LED-GPIOs*/
) Z( \' B. X" y8 n; {static const short da850_evm_tl_user_led_pins[] = {3 Y( T* R* b; n/ t
/* These pins are definition at <mach/mux.h> file */
( ~' y3 G1 X" i: v/ [ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: j) e9 E. _; Z- d
-1) Q2 v4 r: D- N4 n3 B
};
' q# a" I6 B, M- ~* e# G1 b6 g3 i/ o$ J+ z, f/ J; y# Z
static struct gpio_led da850_evm_tl_leds[] = {
+ j0 l, u! `# t3 R* s4 e {
7 L, ^- g+ S3 w- E1 e( j* l, h5 B .active_low = 0,
# r9 X" A9 S, B .gpio = DA850_USER_LED0,
. X+ g3 B) R& d! j2 f% T4 b .name = "user_led0",* g2 u5 P; Y* H+ s+ ^5 G$ o
.default_trigger = "default-on",
0 c) ^4 K& }* o& J a; n },
2 ?7 A$ q! l$ m6 E* o {
; s! t* z# }7 K2 V; q .active_low = 0,; p, t, M/ }- J# z. }' s- r& W. t
.gpio = DA850_USER_LED1,. g' I! A5 U6 [3 u' r
.name = "user_led1",
) P4 _: [2 S" W# M& T .default_trigger = "default-on",
7 |% Q; {) w8 g1 R }," l! c8 h8 Q$ u, m1 F
{
, H# { q) X1 y# j# I, Y! l) } .active_low = 0,
" k3 |" S1 |+ h5 R k: H& [2 [ .gpio = DA850_USER_LED2,+ w: M" `, k7 c! M# B q
.name = "user_led2",
$ M3 v2 h/ I$ d' [7 ~3 ] .default_trigger = "default-on",5 B$ K& {; B* _' Z, l2 ~
},
7 y6 t: @& a0 h! k {* W# T' V3 K+ U5 e; i5 F2 v
.active_low = 0,! | D* i+ v. m
.gpio = DA850_USER_LED3,
. F7 l2 ]* `$ [) }5 Q1 E# F .name = "user_led3",
/ D5 Y0 S% N6 Q4 e2 } .default_trigger = "default-on",
) C7 Z$ U$ L1 l; g* ^ },
) ~6 s' ?# i" z( q1 r& H* K};
0 ~+ g! n- i/ {+ V% o; c% y
! Y% Q5 g; W3 c. S3 Bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
J/ M* e7 G2 @+ b# t .leds = da850_evm_tl_leds,
8 Z4 F! i1 {1 t6 V) s .num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 ~6 I2 f2 R6 G% K4 [( P% C
};
# I' i0 L6 Y+ D
2 }. {7 V1 a" v# g6 [; u }4 N) tstatic void led_dev_release(struct device *dev)
. @$ i8 ^$ c! O9 I{3 Z" K$ M' [' T0 y. J
};. s& R \. i; P; Z( i, `/ M, B
7 j6 N+ x( \* y1 G3 I" {+ c+ |
static struct platform_device da850_evm_tl_leds_device = {
9 r: u9 G* h- M1 ^7 M4 {8 M .name = "leds-gpio",
4 s4 o! A" Y( V" g+ E .id = 1,
7 }! y/ k0 ] o5 o6 A .dev = {
5 Z: _- y7 R# H! R .platform_data = &da850_evm_tl_leds_pdata,% y7 z8 _6 D9 f0 i4 w( \
.release = led_dev_release,
" d; K# a. z f& N: ]& I }
3 r" B) [# `5 o9 B8 F3 a" X};( O4 q7 _/ @( H7 d" l& R. ^7 G
: }5 i* h. r- j4 j1 R$ O Lstatic int __init led_platform_init(void)/ }1 ~/ Y1 w' T s+ \* }
{
' ?6 o! U7 F4 o" w/ W int ret;
d$ e6 G* L$ J& k9 R7 I#if 03 i/ Y: H# \) j) I
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! @( H: z" c! V9 i
if (ret)
6 |5 _5 V T/ d* }$ } pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 ^3 B$ p3 z7 g T+ J3 i" h "%d\n", ret);" ~8 r$ H+ f, |8 @# N. P5 H
#endif
u, ?- R- U M ret = platform_device_register(&da850_evm_tl_leds_device);" |5 Z, B) R# Y( T' M& G$ @( |
if (ret)$ Y" T" V/ V( o- i3 m
pr_warning("Could not register som GPIO expander LEDS");
0 m- G/ e8 T' |6 M else8 ?* |$ ~7 N3 V$ b) D
printk(KERN_INFO "LED register sucessful!\n");
1 }+ H+ N; c" b% r
" J& p% R8 U: P0 ]. Q) l C6 \! n" Z return ret;
) u! h6 y0 u1 u8 F4 ~. H+ V}
3 M; _" r# d0 x" y) S" ^6 Q
: b& D5 ~3 q1 zstatic void __exit led_platform_exit(void)9 X* `% b' F7 o, ?# i4 q r( s
{4 \; T2 H8 u6 t- y
platform_device_unregister(&da850_evm_tl_leds_device);
$ q8 A$ @+ k: r* {: F! W% s5 Z1 H5 N! e1 j3 w
printk(KERN_INFO "LED unregister!\n");3 e6 P T( E8 d5 A$ S
} X) t" A0 t2 L! L
1 C9 M* E& M5 { H2 qmodule_init(led_platform_init);
\8 n6 K* [2 g' `1 u& n! dmodule_exit(led_platform_exit);& [2 z. O2 E7 I+ Y: }
9 _/ |3 L1 Q! I& qMODULE_DESCRIPTION("Led platform driver");6 H" [# @2 R5 Q0 a2 ]
MODULE_AUTHOR("Tronlong");
3 v8 A; Z# s% R/ |( Q0 h- t) HMODULE_LICENSE("GPL");
* N; V8 Z6 Q7 C' Z1 c% a" Y6 f9 {% B, U& \2 R; J' X- A
|
|