|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# c1 y* v9 X: G) w$ x# p
#include <linux/init.h>* t1 X# z2 k @! b
#include <linux/module.h>
* M; T* E1 W( l7 B; s#include <linux/kernel.h>7 i8 A2 o1 F: Y
#include <linux/types.h>
' M+ a- O r$ g% ]( \# ]0 |#include <linux/gpio.h>
?6 {& v8 a9 U2 H6 I' ~3 t+ H* r#include <linux/leds.h>- d$ {# M4 q8 Z* O
#include <linux/platform_device.h>. t9 _& a1 ]1 v9 Q# X- A1 ?
7 Y0 {8 \8 c3 B8 R6 b, T#include <asm/mach-types.h>
) {7 J: ]4 D- O; O1 i% p" O! W2 V* Z#include <asm/mach/arch.h>( m& l* n9 c2 k" M6 j, g% f
#include <mach/da8xx.h>
6 M/ c. Q/ C$ M! V* S#include <mach/mux.h>4 g5 s/ i# {( y) W9 Y
6 |, d* R) i, b2 L
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) @# D5 g2 m+ G! M, |: j* v#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! [- i1 \$ t k, p. |- q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" t2 W8 F; i# k; c/ f1 U
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( M/ C* q: |3 ^* z& F$ B! _& i% S3 O0 ?8 \. x8 {
/* assign the tl som board LED-GPIOs*/9 c7 ~- z8 [$ Z) u
static const short da850_evm_tl_user_led_pins[] = {
5 i3 y! X/ i4 {& \ /* These pins are definition at <mach/mux.h> file */$ _ D; E2 R- e( K3 d2 P1 `- x: z1 Q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; c4 k f5 {0 L4 c6 e5 f
-1
# w9 V9 J3 L( L0 T1 i};
( ?) \$ k2 o, k; v' F" h3 q; a* l" h
+ ^( |6 t6 h& J5 ?( V0 J8 pstatic struct gpio_led da850_evm_tl_leds[] = {
$ o6 R" h% {. o u# @" e+ C {
# B; }4 L0 i9 L* i .active_low = 0,! O6 e- {* T* {; T# U8 g: ^4 U
.gpio = DA850_USER_LED0,
, o+ N) `% C2 U/ a: a .name = "user_led0",. Q9 C: q: h3 g6 y* ?
.default_trigger = "default-on", U7 i% d( ~) H( K* ~
}," l- f. {2 E( ?) N4 B" J# h& `8 u
{
4 K& n% l( u6 ^$ R$ Z .active_low = 0,
% \$ V% q9 \( e+ q, k; a; P6 O w2 L .gpio = DA850_USER_LED1,. M+ C9 J) X, c! P
.name = "user_led1",
, `/ j% |* U/ @! L .default_trigger = "default-on",
" W& z5 H% l1 r& }: ] },0 ^2 q) M+ a' e- |
{0 R/ v, a2 `$ A' i; T
.active_low = 0,
* d% |4 \! u9 E0 t+ w0 c. G# g) r .gpio = DA850_USER_LED2,+ V0 f, ~8 j- K L8 m5 S
.name = "user_led2",
2 e% O& c; t8 f% n* b .default_trigger = "default-on",
' v* ^* n- ~9 F) b, w3 k2 \& M7 d },# {6 Q( Q& w- X
{8 t+ S- |) X8 }7 D/ E
.active_low = 0,) t7 ~' B$ E! G
.gpio = DA850_USER_LED3,/ D4 o+ }% P" o+ V( I
.name = "user_led3",
, ?/ b# {" L! Q1 W2 o .default_trigger = "default-on",
% e- G5 Y( U4 d },
: t' t' T& R. r! D( Z};' a3 ~& U% f9 ~! @& Z! _0 A% D# v
, T) g9 K: P& }5 d5 A u& nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 O5 e G0 S/ ^; `
.leds = da850_evm_tl_leds,
V/ R. D/ T: V% ]3 `: y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 _9 k. L/ z6 M8 I; T7 Z" N
};
) T% @2 |7 Z$ \+ ~' [" V4 n0 }) D* T; D/ t- ^* h1 @! Z; f- `2 V
static void led_dev_release(struct device *dev)9 E8 Y+ D* z. w& ^, z
{2 i$ ~" `9 k1 v; W5 L8 w
};. }& P- e+ N! X$ K) I2 E
0 @$ G8 |& |+ y; t4 `) Y. Dstatic struct platform_device da850_evm_tl_leds_device = {
' J, F& F3 e+ p) Q" N .name = "leds-gpio",
. w" j5 @2 y, T T$ n' Z; C .id = 1,: O: P T6 X, R+ ~' Q
.dev = {/ l/ f$ n: d4 v7 g# b" h
.platform_data = &da850_evm_tl_leds_pdata,* x: u: l$ X1 j+ H, Y; l6 U' c
.release = led_dev_release,( x- J* z6 T% V5 O
}9 y! ~: P- Z) ~4 h5 Z$ T
};8 }" u, m4 P( p) r
% j2 N0 ?& k0 Jstatic int __init led_platform_init(void)3 g; O% B/ l/ J4 m% E
{' G5 y+ a% ]6 ]+ L' F
int ret;# v- U! x( d" y* T
#if 0
+ P& o6 S+ _3 l0 T% o, G6 b ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. V' V, m1 r$ g if (ret)
" p& u; S5 B3 @, {4 R pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 t7 P% H x e1 }! P# q
"%d\n", ret);0 I6 l+ @, c% N9 C
#endif8 u4 N4 b' R8 Y. v4 r' V5 o
ret = platform_device_register(&da850_evm_tl_leds_device); G: P: X6 {" O. ^) A, F
if (ret)7 c9 R* Q7 [5 h
pr_warning("Could not register som GPIO expander LEDS");
3 Q- \( c1 H: Y8 x. F/ Y/ ]1 q4 A else3 d+ u% |% n# X, x B0 _. v
printk(KERN_INFO "LED register sucessful!\n");
: h# \4 o5 L/ R' n# V
1 N( u) o9 p- Y/ \8 R" A/ e6 J return ret;
2 r7 w, w6 J2 k3 S}
e- x; G9 d$ J, K
( Z* f9 f" i* nstatic void __exit led_platform_exit(void)
! n# P0 K2 ?9 g1 f8 _5 i" T{
4 @! r; _( R6 W l5 ~& H8 w4 h platform_device_unregister(&da850_evm_tl_leds_device);
9 c+ F/ u* R: J ], }- K9 u5 u. i" K$ }" z$ S
printk(KERN_INFO "LED unregister!\n");
z! ~( u. y/ w6 t0 V}; Y/ T6 Z- \) L: X
3 B# L! q* u/ z. q8 @! D/ T1 cmodule_init(led_platform_init);3 {2 j. Q/ T$ w7 D: n
module_exit(led_platform_exit);
6 r$ |- l8 O, H' t, d5 r4 e6 |- v+ w" h/ T6 h* u% L9 D
MODULE_DESCRIPTION("Led platform driver");
& T# h, q; y/ uMODULE_AUTHOR("Tronlong");
. x& `3 C/ J5 [7 a5 X1 U* h$ yMODULE_LICENSE("GPL");( `5 a/ a( p" L6 N
1 h6 ` R4 X/ y0 z |
|