|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 R& H0 @8 a& e' O#include <linux/init.h>
+ }' B* ?4 Y X4 l9 S+ U( L( E% Z" W#include <linux/module.h>$ ]; R) C) q b5 M; ~
#include <linux/kernel.h>, N3 {/ Y6 A X2 Q, L6 r
#include <linux/types.h>
5 q9 }2 k( K0 G4 W8 ]3 s#include <linux/gpio.h>& W9 Z3 W' A3 b7 Y) ^
#include <linux/leds.h>
2 D: X$ @( O5 i2 _# x+ j#include <linux/platform_device.h>
3 D8 {9 W) P; r/ v5 z$ Z8 Y" a$ k2 Y, D# o3 x0 C0 e g
#include <asm/mach-types.h>
, C4 K2 [, {' h5 I#include <asm/mach/arch.h>6 _" h0 Y3 @* x4 W
#include <mach/da8xx.h># l+ s# c+ S- A7 U: c' z
#include <mach/mux.h>5 T% Z7 l+ q, k, }" @& V" ?3 t- s
9 G2 W( i7 T4 y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 F4 Z7 Q: _# ]' j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 Q. S( ~8 f. `# N3 J$ g#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 Q* G+ N5 H: T
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 d' ]: t' M& }
2 u* G5 [& h) B6 D! f6 i* O8 X/* assign the tl som board LED-GPIOs*/
, D6 t2 F2 t. s/ l7 fstatic const short da850_evm_tl_user_led_pins[] = {( w: B( D. v4 y
/* These pins are definition at <mach/mux.h> file */9 F( _5 | B8 U
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( F' | j# B9 }' ^4 G8 v- m
-1
A( V+ C4 R1 Z};
2 k! z& d' L4 Y- |9 L- M( x& \& v3 R8 w) j! v+ I: q
static struct gpio_led da850_evm_tl_leds[] = {1 `% l2 r/ [) C, K
{9 O6 D- e5 ]$ @
.active_low = 0,
, v0 O' f& _% o- q2 J6 t5 Q6 y .gpio = DA850_USER_LED0,
. K: Q) f8 y5 J2 [( M/ h( |6 P/ X .name = "user_led0",
9 F7 a9 x* n( t3 b( ]( S- I .default_trigger = "default-on",
* M. N6 C( ^; u$ }. V },
3 T, B2 A C' C& _+ W* M1 H {$ a) n; H# Z' I& F/ u
.active_low = 0,/ D3 m3 n: X A- ~
.gpio = DA850_USER_LED1,% u9 _- A, r% q' I# o
.name = "user_led1",
5 g) ~# y8 Q0 X; v .default_trigger = "default-on",
+ }- T( K) Q9 r3 \ },* z: K5 Q7 h: t
{
8 C9 l3 h% I& c; B5 X$ ?7 v: N5 g8 u .active_low = 0,
' N& o5 _: D# |6 L' F .gpio = DA850_USER_LED2,
6 @: V& G5 k, {1 [3 X .name = "user_led2",
! Q/ q& L4 }9 ^2 g' E' t .default_trigger = "default-on",
. `2 J1 a& T% g4 B- w, F },5 \; i2 ^3 ]7 k8 L( Q
{
' j! ]! \0 N1 k# g4 s& O .active_low = 0,- F5 K3 q! ^7 t
.gpio = DA850_USER_LED3,* Z4 l0 _$ P0 \0 E& O
.name = "user_led3",/ m( H* D# g) G7 U1 {) k# I
.default_trigger = "default-on",
- a' ^- y4 {* {0 ]# H },
8 T+ Y& J8 ?. F% J1 S- t# J};1 a8 E- l( g' U' B! b
1 Z# ~& W' W; V$ _# ?# W/ Y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( G( B' {' H" D* O* A; y: P .leds = da850_evm_tl_leds,; u8 |8 U% Q0 T3 P6 ^% |- e
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) ]8 }) U- }. O};: G) ? w$ r# P# ^* V' K
7 [$ F0 {. N1 L$ U/ b& ?static void led_dev_release(struct device *dev)# i3 D; |, \- b4 v1 o0 q
{8 G4 M6 K) ~2 a
};8 N; q+ H& C% h7 w! M1 b
; @$ @: F' v5 [, K7 R4 |- w) vstatic struct platform_device da850_evm_tl_leds_device = {
9 @7 ~( S+ ?* t" z .name = "leds-gpio",9 D' }" K X' O* n ^
.id = 1, l% k5 w( h0 w& B* r: ~0 c) V
.dev = {! h) e* }- I6 X/ J
.platform_data = &da850_evm_tl_leds_pdata,# q7 W V( i: R# s( Q1 u
.release = led_dev_release,
# K4 Y3 V' f. j# p0 F( ]; H }
3 c9 E, l# g% \8 }, V: W2 X};
# b6 P+ `' m* E0 J, Y& R& y0 a6 q) y& c) l8 @( L
static int __init led_platform_init(void)4 C; B; L# d; h
{
$ D9 u- v% h9 O- d int ret;
3 u0 ^ `& t2 z" E#if 02 A2 K2 }: t; t9 M5 S# e2 a
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 r. M6 i6 J2 Q: Q1 a; { if (ret)7 |2 n# v" V0 E: P3 i Z1 B
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: [$ D4 V: y4 X4 Z% a- ^$ B- y "%d\n", ret);* U) o5 N) e; ~& L! d7 _' _1 a
#endif" k& L' ^; m$ c3 Q2 w. E
ret = platform_device_register(&da850_evm_tl_leds_device);% B$ M* P" l, P$ a; @
if (ret)
. L' j3 V0 y! @; Y+ ` pr_warning("Could not register som GPIO expander LEDS");
- n: F" C* s9 X! C. E T$ X else
' W" @1 ^5 r1 K printk(KERN_INFO "LED register sucessful!\n");' y9 {$ [. \/ `$ N, |) L: t) I v$ m
& V3 v C# L5 K3 B5 B7 x5 h
return ret;
* Q D) {! S! K; ]) [0 D}
6 T' b& ~ G& D4 S+ m9 k' t
9 B& u6 a( }$ h5 _) L6 u- }' kstatic void __exit led_platform_exit(void)
* c: t: O9 e7 h( {* K# B{
2 \. |7 F+ |! X6 i4 N7 x platform_device_unregister(&da850_evm_tl_leds_device);
6 y0 G2 p( p4 K: ?2 Z. D9 y- z9 b: d, S! K- U
printk(KERN_INFO "LED unregister!\n");# a0 d; p d4 g, C& A
}
/ |! m4 ]* O5 Z2 G3 j
/ V5 I @6 G+ ?- g4 U' _module_init(led_platform_init);
+ L& N0 ]3 E% mmodule_exit(led_platform_exit);1 ^. v: y5 N' p: Z7 [7 Z% I5 |- [
/ ^ }3 }& I2 `+ nMODULE_DESCRIPTION("Led platform driver");$ C9 J" `+ N6 q( U" x' ^
MODULE_AUTHOR("Tronlong");* `- x2 d& A5 p/ b M2 i
MODULE_LICENSE("GPL");
" I0 ^/ b5 L' | d1 A: w$ ]
$ C: x9 @ f! F" }$ v$ T9 e |
|