|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* }2 }; W1 J* C: h8 M6 C8 T+ i#include <linux/init.h>& s$ Q) t8 l$ e( ^
#include <linux/module.h>& L2 L$ ]) K; j1 J3 I
#include <linux/kernel.h>
+ m; ?9 N1 {% u#include <linux/types.h>
( `; G- Z1 {9 c; A4 C#include <linux/gpio.h>2 C1 x+ r. {7 L3 ?9 F
#include <linux/leds.h>
% y6 x* G# R) T6 G0 z3 E. z- F# C#include <linux/platform_device.h>. z, \8 B& b8 ~( ?' p
/ E6 b" z+ }$ b) m. h1 \: L3 j4 w' B
#include <asm/mach-types.h>- H# J7 \& [ i$ o) `$ i4 x! J
#include <asm/mach/arch.h>
+ j" D6 ~3 u8 h' b/ `! {#include <mach/da8xx.h>
0 C: k3 O& }0 a5 s: A2 }6 N#include <mach/mux.h>
, A$ K3 k$ ?1 f1 Z# F" r7 S c+ u0 z. e3 G9 E* A* p
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 N8 \0 O! [, T9 T! Z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' b7 V. \' P$ @; r( Y" p6 P- ~3 }#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 N P& O( A/ C8 }6 U5 {#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! `( d! l2 L6 V- w) m2 ?- S4 b5 i! G7 r) I1 E
/* assign the tl som board LED-GPIOs*/( V' g4 S+ y& [
static const short da850_evm_tl_user_led_pins[] = {! a4 K9 ?. X0 o( C- K8 G7 Z
/* These pins are definition at <mach/mux.h> file */& x, C8 D% J8 m3 S$ {/ f* |
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; I9 `7 F) ?* I9 e e -1
' @# A0 @# I6 n7 x0 q};! X1 {/ Y/ ^7 x9 K
$ T6 n2 z# t4 S# m# vstatic struct gpio_led da850_evm_tl_leds[] = {; x! p5 F d+ k: K4 v
{
2 |$ `8 Q' H& V: d .active_low = 0,& ^" u& t! A5 N! [1 ~9 P0 X4 f
.gpio = DA850_USER_LED0,
/ f! n+ p; a- J6 n .name = "user_led0",5 @7 O* e6 M. ~
.default_trigger = "default-on",
6 C" J3 q& O7 |3 c( J },
' B, d3 @# B' N9 f$ \5 Y) [ {4 O9 X7 E- E8 m0 `
.active_low = 0,
a7 c! }; t' V" P5 A) u2 @ .gpio = DA850_USER_LED1,. j* r" ?% f! C% m
.name = "user_led1",
0 V: Z' Y' U, R, ] .default_trigger = "default-on",& |, p' }5 M0 O' v' W& Y
},5 j9 V9 I# A0 ^' W) O
{
' P8 U: L0 k! ` .active_low = 0,
4 _3 A6 j/ h) x# ]8 x4 v5 _' V .gpio = DA850_USER_LED2,
) u1 @' r) z0 a1 o .name = "user_led2",
8 @. B+ T/ X/ n& k9 {5 [ .default_trigger = "default-on",
* j# W) ^4 m8 L6 T- d3 Y },7 n- e( \1 d/ t" H9 ?9 J
{6 s, j% U2 A' d* @& o9 a3 m
.active_low = 0,
3 _ S6 l/ ^; H: e( |7 E2 j0 e: P .gpio = DA850_USER_LED3," |! n& e. ^' V6 Z6 _2 s8 `( ]; l
.name = "user_led3",
% M* O, N! D5 ]7 | a .default_trigger = "default-on",
. E: m- B# ]6 v8 W0 } },+ ~+ x5 ~' j; Y: E
};7 {( U6 X' G/ T! d- O2 {- l$ z# \& l
' h: m; b# g m/ _7 z% Rstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' N3 m& D0 q; c .leds = da850_evm_tl_leds,' B1 F3 g k, b" O
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 K3 P" _8 s" z4 b% a( X! V/ L};
- r& w- b, n5 P% B- r% Y; U& h
" z. u0 s' ~* [* ^; R- B1 \static void led_dev_release(struct device *dev)/ s( K- V: `. \5 ]0 b0 Z, q
{
' ?2 G4 q- v) w# T" o% j};" r& l- g8 w8 k: j8 w
4 Q& e3 G3 y& P/ r5 M0 h) W, N
static struct platform_device da850_evm_tl_leds_device = {/ W, b+ K5 k, w; `+ u8 F
.name = "leds-gpio",9 x6 |- m. z( L+ j: v* b
.id = 1,
' V) H8 F1 N* M+ C .dev = {6 e6 }+ D t: ? `
.platform_data = &da850_evm_tl_leds_pdata,; {* C, M5 y$ N! X" X9 Z
.release = led_dev_release," x- X+ t' r7 I, Q; [
}& |) h3 C7 @0 }; w: N2 O6 n
};/ K( m) k+ Z% K$ F* b
' u/ P j& u0 k+ k% M/ f/ k$ Dstatic int __init led_platform_init(void)2 L; Q7 ?$ H8 {7 x9 a4 ^* O
{6 W. M$ I% |* Q& |6 I
int ret;
# v' j- _, F2 u6 u2 H u9 S#if 08 H# T8 ^. `: }
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( O% u6 T+ F$ I
if (ret)' R" d9 v( v# |! S! i* P+ F
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* S3 s1 j6 R: A5 x" M6 n, u" s$ F% n
"%d\n", ret);
% L& j# M* @) s#endif" ]: g. Z1 r+ b9 V
ret = platform_device_register(&da850_evm_tl_leds_device);- j8 F C5 [2 | M7 @' k5 w# {
if (ret)9 Y, w1 V* p. z6 u h4 E' u. K
pr_warning("Could not register som GPIO expander LEDS");1 Y N4 x* `! n- M
else x1 K" ~2 v6 I5 w
printk(KERN_INFO "LED register sucessful!\n");% C" z# ~1 k- D" t
$ R% |* U0 E0 @. ^6 f% H return ret;
* w* v. Z! P9 W3 }}4 I& [2 S( K) Y* i2 e
8 x2 b3 n: S! d5 \: Z: i
static void __exit led_platform_exit(void)
: H6 n# i) V% _' }' T8 l{7 i% Q0 B' T3 ~- ?1 G
platform_device_unregister(&da850_evm_tl_leds_device);- G$ h5 c4 w5 O$ x3 }% G3 W
" R9 d) T2 ^1 `, I7 c* E printk(KERN_INFO "LED unregister!\n");+ r/ m3 m# z" |3 T9 Z5 B; c' g, H: G
}/ B3 |0 @2 B% W
1 H- R; e/ Y8 L. Z8 H$ R
module_init(led_platform_init);5 q3 C& c* s& Q5 M7 i7 G1 Y; f
module_exit(led_platform_exit);
7 k0 L/ P9 s- x& Q, T" c" J
' D' r- A. Q, a; OMODULE_DESCRIPTION("Led platform driver");
; Q3 S6 h2 n5 ?! H3 rMODULE_AUTHOR("Tronlong");
/ y4 o& n, ]+ W7 N1 C ^MODULE_LICENSE("GPL");
3 W& O, z3 W6 i$ x5 j0 |- O# _7 d9 \
+ y8 J; Y7 u# q6 ]4 p" ` |
|