|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, y0 _! S1 F+ ^; X+ X, U$ j
#include <linux/init.h>7 Q7 l% ^' _+ y, ~ H3 A& Q9 l Y
#include <linux/module.h>$ P' u8 U: s& t7 T/ `; L" Z: Q
#include <linux/kernel.h>
( Y! u8 w' F6 D, p) E4 n/ l, O#include <linux/types.h>
! K5 L* [) w# g# w, u. _#include <linux/gpio.h>6 j+ C C. l8 t5 t' p
#include <linux/leds.h>' v3 J4 _. f2 H+ Z
#include <linux/platform_device.h>
- Q M5 e5 A! z, P7 t' {' z7 V0 H$ T9 C% v& f
#include <asm/mach-types.h>' q* Q6 K3 ]) C% J& ~, Q1 c1 n
#include <asm/mach/arch.h>
* V0 X% g, p4 u1 B( z. P e#include <mach/da8xx.h>) {9 `4 }6 i6 M" x8 S* ^- a3 y. W
#include <mach/mux.h>
; o4 d+ w: H& }( u
3 {' {1 R+ \- h- U9 t( J0 H#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
( y' Z7 o, F/ @5 G#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) ^# k$ k t, j4 V#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( ~+ b" Y& T# C: e }& b" e( r
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! S A9 p' x4 q6 q5 c1 ^% g& c, @8 ~2 x
, t) M) i) N+ `* E9 n- j4 i
/* assign the tl som board LED-GPIOs*/
6 F. z. ]4 a9 ostatic const short da850_evm_tl_user_led_pins[] = {, f5 ~8 ]% A: V. Y0 `% } M$ u/ T
/* These pins are definition at <mach/mux.h> file */- e% }1 @3 r9 q7 D8 A5 e& u
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 L( r' D R( N6 n- S1 Z; {$ |) i
-1. F6 l& `- m% z
};
9 _/ Y$ j: n. R+ s/ [( K/ u1 C
2 E) @7 p( G9 _) F) a0 Ustatic struct gpio_led da850_evm_tl_leds[] = {
/ k" I2 x2 R4 B {0 m6 B3 a% L/ A( \
.active_low = 0,
2 c2 ]5 @5 m$ C; H1 f. g# | .gpio = DA850_USER_LED0,
' N* a2 Y8 b& [ .name = "user_led0"," @) H) H( o) m' t( z
.default_trigger = "default-on",
7 Y' l8 p, s( k* L },3 u) u+ E9 e( Z, o
{
0 I& z2 W3 A D6 d, Y .active_low = 0,
$ n. A3 J) Q. Z+ \ Y* n/ r: g .gpio = DA850_USER_LED1,) s' G9 c; |5 {3 i# I! d$ g) M
.name = "user_led1",- U! ]4 K3 a ?+ M7 X9 @" d. Q+ q5 M
.default_trigger = "default-on",
9 J: y. D. ~" E },
2 c+ s" d* U5 v3 o0 V2 T1 Y( s% ` {
6 R( E8 l0 I2 r( t4 m4 i7 Z6 ^ .active_low = 0,* Y' K2 Y4 B, O3 X; H
.gpio = DA850_USER_LED2,$ R i$ S+ V+ u6 y1 E3 Q
.name = "user_led2",# W; Z/ k: j0 p' Y! o+ c
.default_trigger = "default-on",
8 d2 o* k o8 Q4 J },2 g5 e4 t, {2 ^' [) H; _
{$ c7 M2 U/ ?' w x
.active_low = 0,
% v( R3 S: l& V# o1 G0 f .gpio = DA850_USER_LED3,
- G2 g! O2 v' @& z0 u2 d g* `% W) F .name = "user_led3",
1 Q2 w5 \0 F) t9 ~& b7 j .default_trigger = "default-on",
: p: d8 T5 Y- v },
}: Y( z; l9 Y: h& J& ]$ K$ L5 m};- ?) o- u0 H6 l3 O; g: F: H. e
. s/ s0 Z8 A6 g( qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* _+ L; _& l( g+ g .leds = da850_evm_tl_leds,
" t$ g/ ^; a' f* b .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) w' W ?7 U, r5 w! a7 Y: R};
* C* ~- h# z( j( n7 `, |$ b
) _$ L" k3 K( e; C4 _static void led_dev_release(struct device *dev)& L. X/ M: n1 E) t- J6 b
{3 M9 W6 m. {% a! u2 e4 O
};. B/ W2 j( K3 `* J, z9 }. u8 X6 t
5 i5 X$ B! o4 {- U* V( ] lstatic struct platform_device da850_evm_tl_leds_device = {% C+ y3 Y V, H( s) }( {: s
.name = "leds-gpio",
+ H8 b& U2 V8 v, t .id = 1,; O" c) C i" j9 J# X
.dev = {+ u L1 n3 P* e' v; o8 ~
.platform_data = &da850_evm_tl_leds_pdata,
2 z$ W# d# C# C0 ] .release = led_dev_release,
4 ~) q: a7 @3 h }
( q% G% Z7 N7 L% K) y S};+ ]3 l0 G4 |; H1 x$ o8 ]# z
- l( E3 _/ e$ Y8 ^( u' M! I# v: Sstatic int __init led_platform_init(void)
6 N) q8 s* |9 q7 X+ E0 j. z7 x{
7 L" f- C# q, F* w int ret;
" W% N( w) F# R6 ?0 g, [7 {' z#if 0; J6 d# n: Q; q. J& ^& c8 S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* J. I' B: @; r. z6 \) I4 m if (ret)
4 Q1 f5 n1 m M- n. w pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 r3 K9 l2 F" D, L* } "%d\n", ret);
1 A. h8 @3 a4 b9 a#endif
2 u( e* y% v O$ C* y( y/ Z% _ ret = platform_device_register(&da850_evm_tl_leds_device);! n/ i+ B+ D$ U% ]) Q) F" h
if (ret)+ c/ f( @ h, n# P+ t/ g" g o* O4 m
pr_warning("Could not register som GPIO expander LEDS"); {- E5 L* J: [" f
else( j& n) t8 O" P: ]/ k
printk(KERN_INFO "LED register sucessful!\n");* q; p9 p! a6 a- r! L. Y
# A4 w% C- R7 I return ret;; L, x- c% O' B! E0 F
}
+ I5 U3 w9 K$ D6 \" t1 \) e4 o$ a
) t% J. e x0 U0 a& {( ~4 ?static void __exit led_platform_exit(void)
/ v' X" m1 D1 y! ~{
' P/ I* ^7 s3 z$ }6 I& g platform_device_unregister(&da850_evm_tl_leds_device);' K$ Z3 Y" e9 G6 c( u3 k$ [
! H3 a4 c, V! a- U. x, q8 M printk(KERN_INFO "LED unregister!\n");8 y4 {6 F+ ?5 x7 y/ j$ h( I+ Y
}
. F* T, K: M) @' x+ C3 g) _* \/ {+ W: s: C
module_init(led_platform_init);
1 [5 w4 [! F7 H( ~ ~- J2 fmodule_exit(led_platform_exit);; s0 x2 I, i* v9 O
8 _9 w3 b2 V8 a/ M3 }+ H. x
MODULE_DESCRIPTION("Led platform driver");
& T( \) c# W$ c g( KMODULE_AUTHOR("Tronlong");
v0 @4 Q8 U3 I3 ?* t; I' }! UMODULE_LICENSE("GPL");+ {) |( m; M5 S6 ^& q( R, {
4 d2 {9 o8 F6 _ f4 W7 q- t
|
|