|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; f: @/ w, v5 e; b#include <linux/init.h>
+ }7 ^! {$ i# p" `2 \. s; c& s#include <linux/module.h>* A3 `+ x9 Y: x# S
#include <linux/kernel.h>) w- K5 p; ]9 `# j4 a
#include <linux/types.h># y+ E! F& H) {# \( W& O
#include <linux/gpio.h>
; e/ c' H2 j8 E3 d5 K2 t#include <linux/leds.h>1 H4 j0 A2 _3 h% p, S4 g
#include <linux/platform_device.h>( T V4 f9 V# n# ~! p( f6 ]& T2 E: R
7 s! a" I4 {& w- c% d* c# y
#include <asm/mach-types.h># t' S5 }' G7 x2 u7 Y- r4 u
#include <asm/mach/arch.h>. ?& Y6 C' h8 {; o4 `& T0 b5 V1 t
#include <mach/da8xx.h>
$ H* {# B; W# Q1 [+ N9 U; I( e6 l#include <mach/mux.h>
8 j% F5 x! g, o& i2 F! u! j
7 t/ A% }( t. ~' Q0 P8 e! z; g#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; j) F; }9 _- M' h6 }#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), M" u4 r* t8 x! g8 \ f0 S& N8 {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ P4 b0 ~: i) d1 F. O5 p2 {, `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! j" k4 Y9 [7 u. i% p0 P: Z3 Q- o2 k0 c
/* assign the tl som board LED-GPIOs*/
7 r6 e# n. y7 S5 V) d: b* Lstatic const short da850_evm_tl_user_led_pins[] = {2 U3 ~& r9 \' k2 W! e
/* These pins are definition at <mach/mux.h> file */
: J8 d4 I. u4 Z1 e DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ B( j) C& P. }; e -1
- X1 L; `$ b8 s( h' [1 q};! y9 a% ?: ]- q$ `* ]. g, z
4 p3 b4 R" Q# q/ lstatic struct gpio_led da850_evm_tl_leds[] = {
4 u8 T# {# C+ E, e {
% [3 J m8 O3 W9 | E- l6 |) W, q/ A .active_low = 0,
2 d1 u0 q- }/ p .gpio = DA850_USER_LED0,# Y; q6 {! J& u# |3 ~
.name = "user_led0",9 W$ X G( e+ ^# p: Z
.default_trigger = "default-on",
# W$ A- G) k5 U6 b },% n+ w. }8 j3 Y" X, j, K/ T
{
- j* F& u- O7 `1 L7 Z .active_low = 0,
0 E. g& ?% q2 N, N .gpio = DA850_USER_LED1,- x. p# l& b0 N) X
.name = "user_led1",
& w4 s/ r8 J9 S. W/ d K .default_trigger = "default-on",) X6 j# v6 ]. d
},
' r( |+ t0 n- Y* Y# e {4 R8 S$ X2 w5 |& w
.active_low = 0,- g- H$ t2 _0 o3 M% _6 K
.gpio = DA850_USER_LED2,7 |5 h. _6 Z; y1 B4 o. t( u5 f
.name = "user_led2",
8 m1 q! s1 Q7 R1 y .default_trigger = "default-on",
5 x# ?$ Z0 z. S! C: A7 t },3 H7 g. p, h4 ?6 @" V
{1 r3 }- P0 @' F V* j* X2 ~7 t
.active_low = 0,+ l" W, q" M8 C8 N% z
.gpio = DA850_USER_LED3,; @% h6 g0 N+ \- v% C7 Z6 Q, P
.name = "user_led3",8 l' ]4 ?. p' J- j
.default_trigger = "default-on",
2 T' e3 X' ^; ?! _; p },
% s& M- m4 m7 _, o6 A+ w. h};
: w% z- w7 S- P0 r2 I) @4 u0 z+ `4 ~0 q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ D9 p: h5 [8 q
.leds = da850_evm_tl_leds,
0 U7 t% E9 m) `' f# R& n+ x .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) f7 l* x% x+ n/ _6 ~3 s- p8 h' X: `};; I# k* S+ C" H! ]$ u, \+ p( A+ x
" f2 h; J( w$ M/ A9 h9 pstatic void led_dev_release(struct device *dev)
3 @. h9 s7 ]8 a/ d; z- K$ j{
3 i" ]* D7 p% h* W/ {# h};9 ]% U+ p. w, o- D) p
* j5 i3 x3 R8 ]- R& L# bstatic struct platform_device da850_evm_tl_leds_device = {+ t- m$ D5 |% | u; W, K h* W
.name = "leds-gpio",
/ ] ]% ]+ q+ t/ _4 s .id = 1,% F6 h& L$ ~% g6 I/ V/ } f
.dev = {# c" ?' \' J: o M
.platform_data = &da850_evm_tl_leds_pdata,+ m0 C3 B/ }" h
.release = led_dev_release,
4 I7 K! g: c+ G: e, i }
9 f I$ |% M: E- a5 m};6 I4 j8 `4 @/ L/ ~4 |! {1 T4 Z
6 q# l6 L7 }# P$ w
static int __init led_platform_init(void)
4 R$ I$ |, V. z" J! z5 E" v7 M{( `8 O+ i, R) W! d) E4 X9 @
int ret;( ]( }# P. M8 n
#if 0( ?( r0 }9 \/ O" {) r& O, S, S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ p" P3 s" T' E! r) u+ @( y if (ret)! H* q8 j$ r5 r2 R
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"" g7 X! }1 K2 |! n( Q, W; M: y
"%d\n", ret);. U" o9 C5 `$ Z
#endif
. v ~6 A- q5 P ret = platform_device_register(&da850_evm_tl_leds_device);( o* S; P/ K- V: u7 P7 u0 b/ G
if (ret)
7 @& n0 K$ ?3 @' v9 {' e9 @2 M pr_warning("Could not register som GPIO expander LEDS");+ E6 Z4 ^( L0 E- _! X4 A# h$ P
else) ^* v. f! [; \9 y
printk(KERN_INFO "LED register sucessful!\n");
0 X: u h' Y( Z, Q8 A2 k9 q1 L M
return ret;
L0 m# D, V; X9 W8 \}, B/ c: e$ F6 K1 ^
! u- h; x" n5 d5 ?& W
static void __exit led_platform_exit(void)
1 e @: u5 w5 I" s& S5 u{
. h) K, B, J( n5 h% \ platform_device_unregister(&da850_evm_tl_leds_device);! C# Q* \- N0 _: |1 }3 B2 S' H
, n, N2 S9 P1 R/ j5 P printk(KERN_INFO "LED unregister!\n");
0 L& b: s) U2 J; V& y v! l}
( [( b+ n9 X- w- m! [* b* f+ @
$ Z+ Z S: l! \' {9 g, v0 X7 Bmodule_init(led_platform_init);1 A3 U- M8 n$ _! p6 X9 g* L
module_exit(led_platform_exit);
! O. }( w1 e. W$ W+ _
0 J& H1 T% e$ ~- PMODULE_DESCRIPTION("Led platform driver");, T8 O* A' z. f U6 w
MODULE_AUTHOR("Tronlong");
6 C M: q4 s4 N- t: z# G5 S0 z9 sMODULE_LICENSE("GPL");
1 P; S- [2 ~ v+ }- p) V8 T
/ E' v3 l0 m0 |, O# ? |
|