|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 x% N3 a/ ` `9 e* C5 p% z
#include <linux/init.h>
& |9 A$ ]2 R+ `0 S' ~. ^; e5 U#include <linux/module.h>: X/ `& S; O% j8 r1 B+ R/ c. V* f# \
#include <linux/kernel.h>
: b" W: t5 B; J- n#include <linux/types.h>
) r A8 }) L% ^( }" X#include <linux/gpio.h>" A6 v4 F3 r" ^3 k. [
#include <linux/leds.h>
" T" Q# \, B% W#include <linux/platform_device.h>
5 T. |7 T1 B! _2 n5 m, L
% a. C9 Q/ D! U* p2 s2 g#include <asm/mach-types.h>
2 p+ R- d$ h, W) o2 x" M( Q#include <asm/mach/arch.h>/ u( d% o4 M2 D; Z% Q
#include <mach/da8xx.h>
+ ^: |: q; ~( n, X. @#include <mach/mux.h>, b3 o# o' A* N* v5 P: ~) J4 l
) C3 h6 Z9 N7 _/ S# T#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ G! g6 k/ A9 {$ V. I, U#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- w: Q* y; \( ^7 q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# q. f; I: k# x#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ Z' E: G9 Y6 [ Q. a1 H' v0 ]$ N. ?1 f- Z1 R! {. t4 G
/* assign the tl som board LED-GPIOs*/ `0 }4 m6 a; R2 \
static const short da850_evm_tl_user_led_pins[] = {
7 w9 Y1 g2 [' w) z /* These pins are definition at <mach/mux.h> file */. b4 B5 l( j w" h) s! p e% N' @
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% x, b W" h" |6 |
-1
/ a+ M; i, @2 |$ f- X& T; G: I};9 c' n$ n0 ~& s. Q6 i% g
% {' I1 |9 `7 j6 l3 Y5 dstatic struct gpio_led da850_evm_tl_leds[] = {. p/ }1 q7 \: s3 R# Q. b) k
{, r! X/ ] G& [5 J
.active_low = 0,' f& }4 N# q0 R6 R3 o
.gpio = DA850_USER_LED0,
# x& e* d7 u: q9 ` .name = "user_led0",
- p9 m T" @" l .default_trigger = "default-on",
0 ~0 Y, x6 }7 L% j$ s! d0 ~ },+ D6 T4 U. [/ e6 y% k. B+ H
{
5 g' ^0 `" J2 K! F' |6 E6 k .active_low = 0,3 |( B2 W R6 z' t4 L0 \7 A# I* z* p
.gpio = DA850_USER_LED1,& f+ H" \& [; H0 \
.name = "user_led1",+ q) C# F5 B* |8 J* U
.default_trigger = "default-on",! {7 K9 B2 M1 ^- n) K8 J M. N
},
- k; Z& e% Q- G. V {
6 W. J' I& B; y" T& T' m8 k .active_low = 0,0 n, F7 w, e! M- p; w( Z& U
.gpio = DA850_USER_LED2,
1 ~- ^. R/ h P) N) r .name = "user_led2",
2 Q! \$ w6 Z2 Z* d/ X' Y .default_trigger = "default-on",7 [* m/ Q% U. Q. t- }
},
* x2 Y6 G7 i" n' ^( c. z+ g9 I {: w7 A# [& \9 N. d
.active_low = 0,
; t4 h! X) C; o' L/ l h- t .gpio = DA850_USER_LED3,
+ e. i/ m8 s* i .name = "user_led3",
. t" g. s' }) u5 b* z! b' W .default_trigger = "default-on",
5 J3 Z \* M5 C" j7 H. z B# V( s },( r/ A+ g; x3 ~4 U
};
0 Y4 E: b+ M2 N. t' Y7 B6 @ H* n0 i0 a/ N* W6 v
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. z. X* t+ }8 Q+ z# @
.leds = da850_evm_tl_leds,
6 |5 B7 `& h, x' f; r' s0 K .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- Z- W- E+ ^, Z" X1 C; `};
& ^7 q4 ` K* e7 g) r" ?8 `! f% s2 E, K9 }8 }6 }
static void led_dev_release(struct device *dev), S) C, {" j# J' B% B, Q. n) [
{
* ~4 j0 C" G; y! W};
' X* I4 E3 I, z8 R6 W" C! ]6 M [9 E6 K7 y1 `- H% ^% q. k8 v
static struct platform_device da850_evm_tl_leds_device = {
" b! G6 H4 T; A7 r- g( v .name = "leds-gpio",: j2 }1 p- z: \
.id = 1,
7 V3 R5 J2 n8 x4 b. I/ q/ q1 w .dev = {2 H V0 m0 L6 G; W
.platform_data = &da850_evm_tl_leds_pdata," _6 Q5 y f* Y
.release = led_dev_release,* c9 Z# g: A- T7 r/ M' {
}
$ `- ^ @) [9 n9 \& d};
- C. d% m: D6 }; w, Q- P
: r. v# ^) l& I$ Y' A Qstatic int __init led_platform_init(void)
- x) L9 r/ f" h$ J; Y" m{
* f; I8 Y- [$ O( c/ f2 Z# f int ret;
+ A4 [; W1 _4 D7 a#if 0
# R4 N2 I" t( Y4 Q6 z- P ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& ?& M: Q+ r! z w2 P! g if (ret)! M$ ] N6 @9 y$ W. B
pr_warning("da850_evm_tl_leds_init : User LED mux failed :") m' z& O1 K0 Z2 n/ |0 z. O
"%d\n", ret);
. _4 P4 `. n5 W" v#endif
- _6 G( u0 P9 g- m ret = platform_device_register(&da850_evm_tl_leds_device);
, c% p* V# r7 t if (ret)- Q' O6 Z5 P8 b, J% y
pr_warning("Could not register som GPIO expander LEDS");
- ~# r7 x1 q/ ?+ U9 X) Z: w! u; E4 x else W9 _2 X4 Q' M0 v3 J
printk(KERN_INFO "LED register sucessful!\n");
+ k/ T. f6 u# ?; [, o/ d
- d& g: Q7 ?: f& y' E7 z% {2 T. t return ret;* R# H8 L5 m1 R! |: Y
}
& ?" {1 n, i1 ~. S* h: ?. |3 g3 U1 Q* e: ^
static void __exit led_platform_exit(void)
$ u* ?/ T5 L+ i9 [$ z- K{) t0 _# @( U! ]6 }
platform_device_unregister(&da850_evm_tl_leds_device);7 c. B; Z+ |7 i- B
: _6 F/ B1 [" e6 E# W printk(KERN_INFO "LED unregister!\n");
$ } E, T9 i3 U8 {- n% f}0 D1 \5 [2 b( `3 H& E8 K
2 X6 H; r& a) U$ x& G
module_init(led_platform_init);
7 h' `: u# R4 s! c- @; b/ X( Amodule_exit(led_platform_exit);
* x7 ]& ^ }( G* G, a
( `( q8 [4 h+ F3 {- N1 f9 EMODULE_DESCRIPTION("Led platform driver");+ K* B& @9 Y2 D' B& n$ Z
MODULE_AUTHOR("Tronlong");6 I& L C4 Q' t- K& e
MODULE_LICENSE("GPL");7 Y* Q' g/ S% ~
$ Y7 t3 `; I' X# L) T |
|