|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ o) B$ P( u9 U8 |0 ~4 y
#include <linux/init.h>
, Z/ [) a1 v/ C#include <linux/module.h>$ C" \8 |& r4 l
#include <linux/kernel.h>3 K9 ` h1 z O& @% p F
#include <linux/types.h>
$ f/ X1 o. t' T7 [* I. X& f#include <linux/gpio.h>
, w' k: U; W4 G& T6 N9 E. f+ a3 I#include <linux/leds.h>
. c3 K9 R/ o' D: ^$ ?#include <linux/platform_device.h>
1 ~' ]$ H8 @* a$ Y. w' s; M R8 l9 W$ Q2 }) ^" N3 }- p9 s
#include <asm/mach-types.h>4 |6 N7 m! C' f: ~# A2 ?6 I
#include <asm/mach/arch.h>
. S/ Q1 _. W* y$ [: ^2 R8 u3 n#include <mach/da8xx.h>
7 q/ F! n% B! U+ V6 S/ Q#include <mach/mux.h>
- B7 Q1 U$ t- r. w. a2 M i% Z: T; `: \+ L7 d1 i, g( E
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 b5 A+ O' t& y8 d7 i1 s#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 J2 b) y) c* O( L" }#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) J+ q( n4 K$ Z6 j! \
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ p- `$ F# D4 b
% l3 q$ v, T; J' }/* assign the tl som board LED-GPIOs*/
+ n" Z; E! \, D" Pstatic const short da850_evm_tl_user_led_pins[] = {9 Z- r- `* r7 r4 w' Y
/* These pins are definition at <mach/mux.h> file */
3 s' I4 ^0 `3 \ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, L! d) s. I- B, b/ i. f3 h! @, t' {4 S
-1: o- m, p& @; ^& }" w
};
6 D1 D1 s" ~3 x1 i7 l) V# `8 N) i- S$ I; v3 B* c2 U
static struct gpio_led da850_evm_tl_leds[] = {/ v% p) Y$ R. t) l9 @' u. u
{5 ~8 U# g, v1 |0 O j* G9 ] _2 t
.active_low = 0,
7 [8 }/ j3 F) c .gpio = DA850_USER_LED0,) B2 ], l7 V9 E7 V/ g g! r
.name = "user_led0",) I; \0 L W9 Q+ s* n
.default_trigger = "default-on",4 T, X% X5 u4 h. l8 N
},
/ _4 m. }( n: Y+ r% y- b' f1 z/ S {
, U% a3 O2 `2 {* {% x# V .active_low = 0,( M7 P* ~! V% ~" Y* S5 J" R# p! H2 ?
.gpio = DA850_USER_LED1,' `9 \5 G$ [) F+ A# X7 e" ]
.name = "user_led1",! Z# K5 c& N0 m
.default_trigger = "default-on",
+ b8 p( |$ W0 j& C },* @0 l4 S! M6 v' q! c
{
& m$ N) r0 b% g* u& U: j3 Y3 j .active_low = 0,# W! Z0 `. I( ?* Z7 m
.gpio = DA850_USER_LED2,
' `5 Q2 h. _% B .name = "user_led2",3 g: r4 V: l! w
.default_trigger = "default-on",( q. O/ p( _; {+ t1 |, ?7 ]( m
},' ?$ Z4 y: `5 r/ ^9 W& |
{
/ }6 n0 e% A- A# ]* { .active_low = 0,+ V% L1 W/ _: @
.gpio = DA850_USER_LED3,
9 R* }1 |/ p M4 ] .name = "user_led3",, ]8 h. m2 Z/ i9 ^
.default_trigger = "default-on",
0 V" v6 V6 b( v- j },
$ l& }, B4 s) k* T* n: w( j; c};- R& x; K0 {* b6 R1 x
: p k* f# a, |0 k' Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ t; ~% |. s- z0 D2 q. X .leds = da850_evm_tl_leds,/ b$ I9 E8 r- O5 Z+ Z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),* v3 j3 ]' p* `8 H* `9 ?# O
};6 \& I* A& g! f
9 {( { U4 b. d0 A/ A6 I
static void led_dev_release(struct device *dev)* N/ X3 J, d1 z
{+ _5 B" {2 d- a
};* s) n/ P, f' H& {( B
/ {* e# w6 B2 x0 A
static struct platform_device da850_evm_tl_leds_device = {
$ ?( M! l. \8 w .name = "leds-gpio",# w( Q) A/ |, r; i$ |
.id = 1,
* z* q6 w: L' {, r+ M .dev = {/ Q* J4 `, [- k+ U
.platform_data = &da850_evm_tl_leds_pdata,0 C" N+ C5 R0 @9 s- {
.release = led_dev_release,: c& f2 {0 |; I: j& [
}
" z6 ^4 J4 Y: P w! i$ w4 |; d};! @- V# Y l7 z7 D- ^1 R0 s
5 C$ y' i) n2 tstatic int __init led_platform_init(void)
- K( D5 Q, ^; ?2 R/ W{7 L* @0 @3 ^# N5 `+ H
int ret;$ n U$ P( x! Z9 Y C! L9 [
#if 0
; f+ C- `/ _) |' k+ G g i ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 m5 z H, x8 s3 v6 }: t: y' ~6 u
if (ret)
% |, z" R5 |. f. k+ p pr_warning("da850_evm_tl_leds_init : User LED mux failed :") ] L, ?: @& O! ]8 j3 |; m7 h# l
"%d\n", ret);8 R# B+ o) {2 X# j
#endif+ W, \7 |' N; g" y
ret = platform_device_register(&da850_evm_tl_leds_device);& R* w6 C0 P+ ?
if (ret)
/ Z8 x: L( b/ n7 x9 q; O pr_warning("Could not register som GPIO expander LEDS");& J/ Q. Q% G2 T
else: B2 o: T# z, b C1 v" K" E
printk(KERN_INFO "LED register sucessful!\n");
# v7 u# S7 r' N" u
. M8 t& T& L+ M+ C: t4 j return ret;3 l" y! a9 d0 q# l) I7 g- ?6 b
}. K8 x& O8 y% v
* a7 y+ R6 S7 E9 @5 Kstatic void __exit led_platform_exit(void)8 I" V) {! m z: [* W
{
2 \: V+ ?, g% g* ]. M$ _ J8 j9 k platform_device_unregister(&da850_evm_tl_leds_device);
6 X/ T3 O/ S- s. @5 H# d0 o$ K! ^( |1 n5 o. K
printk(KERN_INFO "LED unregister!\n");' Q% w4 v) X6 D3 E/ m8 D% x1 ?$ M
}
. r5 U( }/ |" {, C( A* {& G2 P+ ?& ]1 p2 c! b5 @ E
module_init(led_platform_init);5 q6 @7 p" I5 |5 {& n w
module_exit(led_platform_exit);3 f7 b4 {3 g0 O0 Q
: t. H3 G) [0 U, g3 ^5 d2 oMODULE_DESCRIPTION("Led platform driver");
1 o7 ]8 X1 `0 v2 X+ YMODULE_AUTHOR("Tronlong");
4 A8 V- R6 ^. p* h( g1 v. }) _0 ?* CMODULE_LICENSE("GPL");0 f3 Y5 M0 q1 E; S+ y
! c* X0 n( ~* l4 r1 R% W
|
|