|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 k) T4 B% j7 Q) ?8 G0 g4 x9 `' Y! {$ i
#include <linux/init.h>. h9 P6 d, w+ A9 S4 a9 y
#include <linux/module.h># D& v4 X% y$ e' q- o% a- R. c
#include <linux/kernel.h>
0 L1 M- C5 G; B#include <linux/types.h>
6 X& u! P. J/ I3 S& u( |4 V#include <linux/gpio.h>
/ t9 f4 `% e x6 n) L#include <linux/leds.h>
7 Q+ v/ H: s' w) I2 ?#include <linux/platform_device.h>. |& t3 _8 O4 N7 h4 u
5 v4 y4 B; k. W1 t% y#include <asm/mach-types.h>) I3 x3 {/ h B$ ~3 P
#include <asm/mach/arch.h>9 N* }1 u" T% W" N' _/ q# W
#include <mach/da8xx.h>
5 j, u% d! z: b5 @2 y# B* l#include <mach/mux.h>, y/ B4 Y) [ j( ]$ e* V
: z2 X5 C* o( F3 x% H) u' y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 V, }! s8 f' Z# |: `$ x#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)# O$ y; N/ K( K8 V
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; K" ?! [1 F3 M4 Y+ @- l#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; N3 \- ]) ^5 P" x6 ~8 n" K
) f# }$ K3 G6 ^ Y! M/* assign the tl som board LED-GPIOs*/% b: L0 z0 g$ V5 C
static const short da850_evm_tl_user_led_pins[] = {
- D. d! Z {! {# k1 c! s /* These pins are definition at <mach/mux.h> file */7 T, n: j& ?/ ~
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ z& p } F9 Q0 \6 f0 f
-1
* @( v2 r! ^6 q};6 R5 h2 _) `* o6 Z
+ ]2 f' c8 I( ~ C6 z: F8 ?
static struct gpio_led da850_evm_tl_leds[] = {; J) o" N3 F- i" s
{
3 I$ ^# \* I0 h! F, H2 B+ i .active_low = 0,
% a6 H8 e2 {# }) q' E9 m .gpio = DA850_USER_LED0,
5 {5 N$ _0 o- p% {% I .name = "user_led0",
5 i, `" }8 ~6 L. I .default_trigger = "default-on",+ a. Y0 B+ {/ M
},. Q2 ]7 n! }. z0 l3 G# Z
{# E' i9 c/ n6 F' h: s" H! U
.active_low = 0,5 I( ]* A5 S7 W% [3 m4 j
.gpio = DA850_USER_LED1,
, S4 U0 t. h0 v& j .name = "user_led1",
+ G" T: F* [! q, H* r .default_trigger = "default-on",: I( b1 ~3 M2 i" o+ J
},
8 T0 r, k3 T0 f2 Q8 m {
0 z3 P& q7 U, A( ^7 ]' r .active_low = 0,
( {( n$ G; \3 B( b" h( ?( | .gpio = DA850_USER_LED2,5 y0 {+ \8 a. A" v- O
.name = "user_led2",( M. m# q4 A a& @
.default_trigger = "default-on",0 n8 Y9 k% k2 b( t, [ \+ W5 o
},' C0 M! I6 ^! O( X. d# t
{8 |. \& F$ ^, M, ]$ l
.active_low = 0," L, w# B% n' j" m0 y
.gpio = DA850_USER_LED3,
' B' J' ^ W/ } .name = "user_led3",+ Q$ q+ \6 \ M* v( B
.default_trigger = "default-on",
* K1 ^: z2 H: I9 n7 u },
/ _$ X& j: K8 A( B/ L};
. v8 f' X' y0 ^% ]; K
6 _+ v9 }# e& Z* {& \static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: L5 ?; \8 m2 i* v% n# T. K
.leds = da850_evm_tl_leds,8 h1 f3 g; ?# s- ^0 N2 X
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 H% F2 U9 E, u" y; Y8 l9 D};
9 ~% [2 n8 s6 z! p& Q* d$ R) C8 \: {1 S2 |' h, _- }
static void led_dev_release(struct device *dev)
9 w4 B- r# X5 N6 X7 }& S- z{
; n8 N. m. U$ E( P" z; p};
# _$ S8 L: u8 |, m6 o% B9 O3 F% `$ G/ Z, N1 z/ o) c
static struct platform_device da850_evm_tl_leds_device = {. M6 z" C* l: p4 y7 `5 d: p3 O
.name = "leds-gpio",- J. v* W. A6 K4 D
.id = 1,$ B- N1 n$ m* @6 G( y2 Q
.dev = {
$ f) F$ V) P& ^9 T+ U .platform_data = &da850_evm_tl_leds_pdata,9 M* z0 }. w" ^1 Y- n( W/ y' A
.release = led_dev_release,% u! P2 R& o9 U0 ]
}5 l: R9 p b/ @) M- U
};2 j2 u$ l' S# d9 U% r) Z* ?
. j/ }6 O. @6 r' v9 ~3 S( ^0 D
static int __init led_platform_init(void)
6 z: {! i/ K9 B+ P{) k" j- G4 J- ~: D1 y
int ret;
8 n9 t0 C% [- f" a* Y/ ~#if 0: Q% E3 I- o- {: t; T; |
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& i! {! U2 T G
if (ret)
. B0 J% B/ B$ s4 j( | o) p pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- g0 U0 f6 T$ j "%d\n", ret);7 t+ `+ O3 r" W, H1 P
#endif4 h3 W* N+ Z& p3 r1 q1 p# r
ret = platform_device_register(&da850_evm_tl_leds_device);/ r5 l- ]5 b0 ]( y4 f
if (ret)
* B8 H# `& s4 C1 ?* `8 l! e pr_warning("Could not register som GPIO expander LEDS");
4 n$ O& _+ Q4 l5 n' ]( u else- I( N0 ]5 r2 B9 Y! G, v' ^
printk(KERN_INFO "LED register sucessful!\n");
/ B) t! o& {% Q$ @8 S7 \& T" R6 @( E4 X2 Q, K
return ret;
$ g: v" ?' {. l& B; y" w}
3 G4 }$ e! ]# c# _# S. e$ i5 h) Z' U% U/ { m+ M
static void __exit led_platform_exit(void)6 o' w- a+ M; F2 g J9 {
{9 E7 L3 q. p! L& Q
platform_device_unregister(&da850_evm_tl_leds_device);
+ k( }; L; v9 N& y# z: T: I, `- z8 g9 x- m; E! d/ [ U
printk(KERN_INFO "LED unregister!\n");
$ M) W! F. |7 k4 y+ V}
& i% ?: Z% n( U- ?' T8 W) p, c: s
module_init(led_platform_init);
{5 V% ?4 [! H9 _4 ]module_exit(led_platform_exit);
4 j! |$ j' L8 p0 I9 Z3 ^. ^, Z$ n4 Q6 L3 E0 }7 n8 y' c
MODULE_DESCRIPTION("Led platform driver");
7 Y6 W% }& i& ?6 T. F; r PMODULE_AUTHOR("Tronlong");
: `2 k* F3 v" Y9 q/ [3 |" ~8 GMODULE_LICENSE("GPL");
- x. a- b4 T% A& ?, d6 w7 N5 ]: d& D/ D; M6 E. o" o9 H) h" ?
|
|