|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
) p' D2 k, I3 g' x. A& @#include <linux/init.h>
& y$ R# ]! _5 Z e' G#include <linux/module.h>7 V2 T: J% G: p6 J. f# z1 _
#include <linux/kernel.h>/ W. A5 E, y8 ^+ S
#include <linux/types.h>
" E# }# `* V6 T& e5 h#include <linux/gpio.h>
9 X& k' T! g& x#include <linux/leds.h># H; i# h8 `, n
#include <linux/platform_device.h>" a7 a+ F' x$ W7 G6 g1 R7 ?0 Q
. ?5 j# @6 b: J1 q
#include <asm/mach-types.h>3 O+ W# p8 C" {' Y
#include <asm/mach/arch.h>* _3 ?$ I" v2 y9 T0 O
#include <mach/da8xx.h>
3 U$ J$ Q$ q2 C#include <mach/mux.h>4 ]' j& M d) \1 c0 C. T; N7 q
( T, k- u# E+ Y& K#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ X t. y& V6 l# s#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' o( q( N; n% y0 \9 ?& [
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 V. |1 Z* H' F2 Y* ]#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): y5 k" Y3 x1 }" v% S
; Z7 u% w3 f: e! }' \! t
/* assign the tl som board LED-GPIOs*/5 V! K; x' f9 Y- V7 p5 D" @
static const short da850_evm_tl_user_led_pins[] = {% n7 s6 X; K' Y' M( E
/* These pins are definition at <mach/mux.h> file */
6 r. I5 V3 T& ^, P6 K$ h DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% {7 `; s" \4 {% g6 ]; Z
-1
) D0 L3 R; F: Y2 ~/ @% v" e};
% f. v3 p& H/ c* a8 v
( F+ y2 ]" {& M$ A O( |static struct gpio_led da850_evm_tl_leds[] = {6 W: l% [1 f# A4 y
{6 [8 t \$ Q) j# V
.active_low = 0,
9 u3 v* E. q! E0 c K1 a .gpio = DA850_USER_LED0,& r0 d3 {, ~. c/ W+ v
.name = "user_led0",
. z4 f. K! G/ O' w) o5 L .default_trigger = "default-on",
7 F$ s3 n W; b a# B" }; l' g },
9 E. i0 y. e! ~7 t) [2 J. D {2 m/ F# D# h; L0 z9 D' d! o: M# t
.active_low = 0,
3 x/ s3 b5 C* K$ _5 L* K .gpio = DA850_USER_LED1,0 @* M$ D. m$ U5 e
.name = "user_led1",
/ Y. l9 G# O( B8 W% m .default_trigger = "default-on",
$ H3 P& U/ z6 z$ N# B; b. `( v# v* p },8 x& g; S0 \4 `+ C! w, [# w, j; E, W
{
2 t6 a& a4 v3 \1 b( z$ E .active_low = 0,
( M. v3 X9 y9 K* x- h .gpio = DA850_USER_LED2,$ Z( C* W- r/ I: o* U+ K
.name = "user_led2"," c z# K! H8 e6 F
.default_trigger = "default-on",2 P. d2 ], s/ V1 y, \' m
},
' |. L0 O* Y% x& Q {- N% {: Y }2 ? N/ f4 P* q
.active_low = 0,
) |1 }7 Y# T0 E) U9 d6 k* e4 | .gpio = DA850_USER_LED3,! `7 E' p% Z0 c6 S* T, X
.name = "user_led3",
2 `. Z+ E& y3 H2 a% ^0 H8 X- `, ^ .default_trigger = "default-on",
8 o7 K; H0 l. ?' o },
m; X( E$ j& @( C l};
5 r3 n4 C$ \) u, i( s U( b8 n! p7 V& P" v, r3 P5 r6 V
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, T3 T, C+ E4 W! A1 _1 K: ~* f .leds = da850_evm_tl_leds,$ f& k& u1 ~9 j7 A0 q/ x
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& F( f) p1 U8 ^/ S# e4 _$ r
};
/ i( P& u& a; F+ D) }% F
$ a1 _* _8 c8 b! v* _' G. t @( fstatic void led_dev_release(struct device *dev)5 B: M) `: I2 q( C0 J! ~
{
0 \$ O" u5 g+ g};, n8 p. E6 N8 D1 H( r
1 S4 @7 |+ @: R% B. Q, sstatic struct platform_device da850_evm_tl_leds_device = {
' m1 o) T( h5 K .name = "leds-gpio",- r( s& O! A, m& H( o8 I0 ^$ K- T
.id = 1,
+ h* a0 |4 l* Z, n+ y .dev = {; D) K: R& r2 Z; e4 \: \# L6 m
.platform_data = &da850_evm_tl_leds_pdata,
: g$ k Y& F l& J% |5 a1 H! { .release = led_dev_release,
1 A7 N5 Z# M2 G2 _# Q) A }
2 c* P/ ^5 v8 i `- g};0 d3 {! T& M" e4 ^, ^
: P: R; u, C6 n# { c
static int __init led_platform_init(void)
z. E' x5 w% c1 O* B8 p{
2 ]9 K4 {" t& t9 K0 E1 A# C0 r6 J int ret;
8 ~9 w. p) {; m8 r: @) u5 ~ O#if 0
$ m: r4 R+ \9 d, `' T ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 M. M1 J* @# J4 y5 z' q, Z: p if (ret)
* k a# ~7 Y5 @/ H* z$ M- B pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" ?" K- ?. s) D$ E ]! ~1 ]6 }2 l* B. B "%d\n", ret);3 [4 u( s* H" p) O
#endif8 [* {8 L+ O4 R+ _. `; ^' t8 c
ret = platform_device_register(&da850_evm_tl_leds_device);1 y b% T- p/ p& U7 [( z
if (ret)3 k+ _- Q+ f9 D0 g$ \& `- i
pr_warning("Could not register som GPIO expander LEDS"); Y2 v6 T9 l1 A$ V3 P
else; L U/ j2 F% a
printk(KERN_INFO "LED register sucessful!\n");7 |* R0 W' ~; D( \
# j1 f- i" }0 t0 Z' E% p9 u
return ret;
. v7 E5 L9 |" a5 S$ d}5 C7 u" M2 q4 ]7 G3 X, h7 X
/ Y! j; B: ^7 U- i. Astatic void __exit led_platform_exit(void)
7 @& {- G& E* Y _% Z{6 ^# w( J: K, [6 R. F. B
platform_device_unregister(&da850_evm_tl_leds_device);
6 H- a. M: [ c9 j7 ?7 c; g) W# [" L2 u7 p5 `
printk(KERN_INFO "LED unregister!\n");
. [( a8 [3 A" w- }3 V; `}
f2 o+ o7 n# a/ D. D+ P3 t) w; q7 r/ z0 r* [
module_init(led_platform_init);, M9 ~4 k1 f0 L$ C$ S
module_exit(led_platform_exit);! x9 Y# a9 h+ e# `
6 ?$ }9 D0 V+ o
MODULE_DESCRIPTION("Led platform driver");
* `. A3 I5 z2 R6 uMODULE_AUTHOR("Tronlong");$ l; Z, n/ I8 w
MODULE_LICENSE("GPL");: j+ u. ]$ x, e9 \* Z' U
@* c( f( Q6 e! k |
|