|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ I; ~6 N/ l0 c" _7 t
#include <linux/init.h>- C$ {: t# Y. y, ~/ R& r2 d
#include <linux/module.h>
- G& X" k) b. p#include <linux/kernel.h>
- u( [9 V' ~; Q1 v#include <linux/types.h>
! P, H6 V. t" R, q( S#include <linux/gpio.h>
- P" S, k J4 E1 a( T, [#include <linux/leds.h>
& R, P, e( G4 R# L, }+ p; T#include <linux/platform_device.h>
0 I% W' ~, B1 p0 B3 X; m7 t& L0 j8 s6 \4 x O
#include <asm/mach-types.h>0 r; \& Y9 B4 L. D7 R
#include <asm/mach/arch.h>4 F/ g6 ]4 y' R. S C* i [
#include <mach/da8xx.h> {; d" ~1 I: H3 Z& r
#include <mach/mux.h>6 r$ n$ G! ?/ o7 h7 p5 S8 x
9 K- P" d: M- K5 t4 L( ]#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) ]- v/ o. O2 {1 w6 K2 ~7 r# w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
& n7 T8 {8 ^8 v2 M$ Y( T#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
3 b/ ~; W, a# g#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 P) {" N% T( C+ w- @9 F
% [9 p5 j7 x0 V0 l, U: I/* assign the tl som board LED-GPIOs*/5 Y( J: h3 p( z' f
static const short da850_evm_tl_user_led_pins[] = {8 W9 a+ c" Q! d- U' ~7 C: P
/* These pins are definition at <mach/mux.h> file */ w0 c2 v. ^" L$ [* w6 @
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 W! O* _( k4 F, x
-13 q; w. ]5 w b$ Q Q
};
6 u! j! j1 K/ K" j
7 y8 X0 F: f& h$ l; S" b. jstatic struct gpio_led da850_evm_tl_leds[] = {5 X3 c# i% ?0 [4 M5 X; Y
{
3 S# l/ J& W0 d" v; d( {4 c+ M .active_low = 0,. D( O) z+ W3 }+ ^3 ]6 R
.gpio = DA850_USER_LED0," M( V* t) G* n6 V. n& x C
.name = "user_led0",
/ K% l% K% \# T0 C; o .default_trigger = "default-on",
8 Z" C; M$ [- S- A8 D. X },
3 [& s& L6 Y7 R' C9 B. T/ x$ I! j {2 @3 M9 z0 `5 E: |$ o0 A
.active_low = 0,; |' l, O9 @1 S0 t
.gpio = DA850_USER_LED1,
0 S b) R( z v: g .name = "user_led1",) c" G4 [0 e# w# a$ i" u0 f7 C
.default_trigger = "default-on",
! p/ A: N8 }2 a5 c9 M" p L$ g },
Q1 |$ Q7 ]0 ^4 F+ i {) n' U+ x& ^0 ~- ?
.active_low = 0,/ ?4 m: b- v4 \8 N+ d+ M! y
.gpio = DA850_USER_LED2,
: q: a# z% v3 }9 Z H( O+ Y .name = "user_led2",
0 O* H* c! c/ M5 q2 y) X& n! A .default_trigger = "default-on",
6 S5 f& _- T6 j/ O" Y9 ^/ f },% [/ v- W; C5 t) W1 @! x
{
0 i% l8 V8 ^! E" B .active_low = 0,
& M1 R, o* e% U/ w2 j* i" o .gpio = DA850_USER_LED3,
$ U9 {! J$ ~ S1 {# L6 C5 _. ?, L .name = "user_led3",$ v7 g* d# H7 h m' o
.default_trigger = "default-on",- k! R& ]0 @' `$ o. r
},) H2 p3 N+ ? |
};' R$ j) |' B5 w. Q
, J+ k0 k3 @3 H) zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. A, U; H" K' O; i7 \) c0 A
.leds = da850_evm_tl_leds,
7 O* X! j% C, P) U0 |, B .num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ H t" N% H" R U+ D
};' A& B& p2 e6 n4 Z
5 R5 w9 H) N0 Z; s3 s3 ]. jstatic void led_dev_release(struct device *dev)8 G6 U* G: X* C1 w3 d6 K
{8 ~3 L' D% i+ g9 ]) I2 a) `
};0 `5 B- S, H P
! Q7 S$ x8 x7 I' n2 q, J$ fstatic struct platform_device da850_evm_tl_leds_device = {
- C# Y+ y) d% g, [0 Y .name = "leds-gpio",0 `; h4 L3 F% O( A- s8 I
.id = 1,
, Q& v/ v& ?/ ?2 E .dev = {) {8 f8 }' c0 {
.platform_data = &da850_evm_tl_leds_pdata,9 W3 D' ?8 C/ Y4 U6 _1 ^
.release = led_dev_release,
$ }. }1 y% T4 @0 O, _; j8 N }/ M+ R' p& i: E" y/ j* }
};0 Y( d) H2 u& V" z. @
% t! M4 c: q) p0 u3 [1 q
static int __init led_platform_init(void)
% a6 K% ~# G/ O0 \1 [ K# l) w{
5 _/ q. E: ?! X6 o7 _* R int ret;: J; F4 J4 @# G4 o% g: X3 Q
#if 01 t4 l# M! @# @. _) m' F2 E& K# c
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 f, M3 @6 D4 J" F& P
if (ret)1 D1 R0 `- h9 B, i% r4 U
pr_warning("da850_evm_tl_leds_init : User LED mux failed :", n- N: E5 U5 R5 G5 j; y
"%d\n", ret);" U. [, |2 e$ O* k ^- I& e
#endif
% }5 {* g P8 g. ^" J6 r ret = platform_device_register(&da850_evm_tl_leds_device);# Z) |' S4 E7 _" M* J- `
if (ret)
8 B1 w$ X7 J& e pr_warning("Could not register som GPIO expander LEDS");, ]) @$ r2 F1 `; R
else
0 r, @( ]+ _3 d, f' J5 D printk(KERN_INFO "LED register sucessful!\n");
* N, `. ~% A% K. Z+ a3 _# m$ x# V3 _
! [3 I8 ]- {( I5 r return ret;& D3 v2 D& x% W9 z! i
}* E2 I( w5 t6 A8 @; W9 ?
$ ]* d( ~( k( L& y9 M: l( E
static void __exit led_platform_exit(void)' D/ J$ G& t" k& L* U$ h
{$ B' r) y6 X3 e N
platform_device_unregister(&da850_evm_tl_leds_device);
/ u' \9 D1 a5 j" J; `
7 g$ c- t# i( Y4 L9 t printk(KERN_INFO "LED unregister!\n");
: J6 R8 h0 U" n" E}
3 ]3 Z, x3 |2 g) P1 I) {# a4 j$ H% T9 M. n7 d% @9 N
module_init(led_platform_init);2 v* X7 m7 r' g
module_exit(led_platform_exit);: Z& ] u2 `4 [* d6 D% y
" A& y1 F9 }- \0 o
MODULE_DESCRIPTION("Led platform driver");
- c' x& M8 v, L f# pMODULE_AUTHOR("Tronlong");$ p6 }( x9 \& P, T( o( v
MODULE_LICENSE("GPL");
* Y/ y! Q1 c! i) R/ L$ Q" E8 l# L& H; p6 g
|
|