|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 @9 o: k" R5 b& S5 K- z/ i8 p
#include <linux/init.h>6 w5 `4 ]) C; R2 P$ n
#include <linux/module.h>) ~; w2 }- c4 `- Z& W$ q6 t- c `
#include <linux/kernel.h>6 J* g- @2 {6 B7 S9 O* V
#include <linux/types.h>
: I5 L# u, w5 _, Z- U7 D1 b#include <linux/gpio.h>7 l t3 B3 H6 [) D) |- Y. l
#include <linux/leds.h>- g: s4 b) T$ X: ~5 d s6 `
#include <linux/platform_device.h>
$ m0 u: l6 {( Y4 e& q
7 F: p) [2 z. N3 t4 Q9 R#include <asm/mach-types.h>$ e* n( u4 j; ~0 S
#include <asm/mach/arch.h>& K2 }( W& v7 ?; o+ X# p
#include <mach/da8xx.h>) P1 f" S) v# r) u* E. \! F1 i
#include <mach/mux.h>
% n1 D- r$ z& A+ I2 C
9 g* g0 @6 L4 @#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) L. \* P2 H" U: S! m* q7 ] K" u5 y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) b/ h5 _2 }' r5 M+ G+ d' M
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 y, i4 m8 {( X2 B; s5 Z& j9 J# ?#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ c, `8 T+ f3 W% P
, {$ U% T% Y, k; w$ ^
/* assign the tl som board LED-GPIOs*/
7 q9 u7 H! m: M; }" E' Fstatic const short da850_evm_tl_user_led_pins[] = {$ C2 ]7 x: A& `& G5 ]
/* These pins are definition at <mach/mux.h> file */
z6 C5 j5 E2 E9 l% u' E& e DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% t9 e3 a1 [! T3 O -11 Y; I/ Z6 g. ?/ w
};( c* X% `$ u5 X+ A6 Z$ b
1 N$ k7 }4 J4 X$ J8 \, D
static struct gpio_led da850_evm_tl_leds[] = {! d+ g) ^2 n0 T
{
) I; v" S$ r/ y5 ?4 J! Y .active_low = 0,5 M( e. \) \# q) e: ?
.gpio = DA850_USER_LED0,
1 C! r$ K7 k0 S8 x7 X7 [. k4 p$ | .name = "user_led0",- I) B2 S [$ L) S
.default_trigger = "default-on",
0 M# {4 ], z/ T" P& Z) e6 s },( I9 L! E" g; R
{- ^. H" X& v; S0 x6 |
.active_low = 0,- V R: n7 O7 q2 }' E) c
.gpio = DA850_USER_LED1,
' ~3 i( W- H2 h+ P) i3 w! x8 n .name = "user_led1",) f) D' k3 w6 s
.default_trigger = "default-on",
2 Z$ Z2 u% b1 \7 Y4 f7 V5 W },
6 t8 U5 k N V' B) d {
6 o3 R/ T: x& [; L p1 x .active_low = 0,4 Y& E1 d: {6 x( m- z* b
.gpio = DA850_USER_LED2,
( T0 o& b+ m- Z% W5 d$ A. Q7 E .name = "user_led2",5 H5 _0 ^7 _9 V
.default_trigger = "default-on",& _! a/ p+ e8 X. h! U. d: {
},/ \ v/ @- | t! u1 W6 c
{% o) R( s/ n) J0 j- B3 l3 X; [
.active_low = 0,( [# F2 W, w2 G/ z5 g* N9 q
.gpio = DA850_USER_LED3,
: I' }, B# {4 v7 O% S8 g8 G9 f .name = "user_led3",
0 z% W# ?2 i8 s- v$ M .default_trigger = "default-on",
0 m& Z# r7 }9 y },5 Y2 b# E: M1 l
};* m1 x# T! ~( E& k+ w$ }1 X
# ^; V# X3 j! q' u( |static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% @6 ]% ?7 `9 U% u. a
.leds = da850_evm_tl_leds,
9 d: z/ i: m3 o( y" x .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ V4 z. N+ @% y& p" k6 P+ f' S};
7 I& Z+ i' Y0 d2 R! s' n% X: O4 s% W6 R+ ?
static void led_dev_release(struct device *dev)
# R5 ]' @! c3 E9 B+ F7 o# ?' W{
9 I2 V k0 v k4 W# ^};
/ f% M/ e( k1 U9 D) k. ^- ]9 o9 i8 B" a, s8 N/ @8 R/ m
static struct platform_device da850_evm_tl_leds_device = {
7 O5 M: T! v- d! @, k .name = "leds-gpio",- u+ b( l3 p4 K/ Y, L
.id = 1,( D4 J# F" N/ v3 q
.dev = {* p5 i% P; [! a
.platform_data = &da850_evm_tl_leds_pdata,
( J. [! y( j, ~ .release = led_dev_release,0 m1 J* n& x) l* T
}
3 ^2 S g* x! j; {6 o; o};
. x$ \6 G0 d3 U* U8 u/ c9 [( n. i, Q$ {) S- @+ V
static int __init led_platform_init(void)
8 G' I& E/ m8 f' D2 ]5 G{
, p+ a# T$ `9 v# n" X& w+ O int ret;
, z5 M4 M$ C) ]% J#if 0
3 d/ F' [" }# ?7 k) o$ j ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, T) H+ J& ^2 X if (ret)& ^. o; u; L3 I" P5 ]1 c, z4 n
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": e5 A( m) j5 i
"%d\n", ret);
$ V8 f5 F2 Z% v7 ^) q#endif m1 m, D% I: S- S9 p& z
ret = platform_device_register(&da850_evm_tl_leds_device);
3 N/ {) G @2 N' \/ G! c if (ret)
! e! Z/ \3 y3 k; A+ \/ b# n( J. O# j pr_warning("Could not register som GPIO expander LEDS");
2 ?$ f! K' N0 @6 \, A" ~, a else) b- x- [4 t3 G h- G
printk(KERN_INFO "LED register sucessful!\n");
# r+ _( z: j4 x' ~( E; Q" g) Y5 d5 v+ w) l6 c! ?# }
return ret;1 T' J7 J5 `- _7 U4 I$ y/ K
}- |# I2 l/ u! f2 l
" }. ^# C; o3 Z) q8 i( b
static void __exit led_platform_exit(void)7 Y9 Q0 Y& l) t/ v. q" c
{; w/ F# ^) g6 T! ?8 i I% \
platform_device_unregister(&da850_evm_tl_leds_device);
; S- ^- @( ]- F- k" @5 Y" \. _* o3 X2 }$ W; b9 H
printk(KERN_INFO "LED unregister!\n");
1 n* j; A2 s3 v: }; {1 y}& [2 N+ a$ w) h! n- |& A
+ J$ @# F1 p: H$ s' v; imodule_init(led_platform_init);8 {$ @8 c/ P: D; J0 T
module_exit(led_platform_exit);4 q* i: k# [ e/ }/ Z, Q7 h
& Y2 y; Z7 n& vMODULE_DESCRIPTION("Led platform driver");
}: V% a# Q! q) H, n' [ K oMODULE_AUTHOR("Tronlong");' o7 b( m b3 o! c* `& O/ N
MODULE_LICENSE("GPL");
" U1 y5 S( D, G
* k& L2 c& y$ [1 v0 |8 L" Z |
|