|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# N2 _* \( N8 ? @#include <linux/init.h>' |! O8 x5 F2 V! m) Z: z7 L
#include <linux/module.h>
V$ J! \' v) {( B: G4 U# W( x#include <linux/kernel.h>
6 e z; q/ d/ y3 n4 | }. b9 ^#include <linux/types.h>- F0 V: N" ?2 b* H! o% Y
#include <linux/gpio.h>
3 G& _0 I& A# E. D! ]. b! q#include <linux/leds.h>) R% X& {8 w9 h J J+ u( u$ @1 ^
#include <linux/platform_device.h>
8 D( e J- V- K8 Q) t# u( G+ ^& S/ u8 Q C5 J
#include <asm/mach-types.h>& o' z+ R6 B0 {! U5 h1 I
#include <asm/mach/arch.h>
% M$ C. _) @/ e% F% D#include <mach/da8xx.h>
- I S: N+ Y) \# B( n$ [" ]: l! R#include <mach/mux.h>3 I# ]' U9 b2 O5 |6 ?( S
3 I, I* q% r* [6 G8 A+ x#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ |4 o% i( A' C" x+ s- p% n
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# U8 D8 O+ V) P7 e#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ s' \, y8 \& @3 y* C9 i5 X#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 M4 }3 r0 g, h/ o* k
C) W4 d1 y$ V1 U. Q" ]/* assign the tl som board LED-GPIOs*/
& a, o1 Y/ Y- M" |: sstatic const short da850_evm_tl_user_led_pins[] = {
$ R, d: k2 P+ D4 j4 e; h) E- [/ ~- x /* These pins are definition at <mach/mux.h> file */4 T! M* b! p8 X1 i) i$ W
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 k1 F6 ~( G4 {
-1+ [& J: s+ G3 c6 L- j' u2 z9 V
};
" X H5 ^- h' R+ u3 @8 I/ v/ K
2 }# ]& n+ |5 [0 jstatic struct gpio_led da850_evm_tl_leds[] = {
! b1 h$ g @6 n) ]! s& R9 E {8 E+ V0 ^4 t8 n$ @' ^# r+ w/ t
.active_low = 0,- d; F! k6 r; \1 p' \& }
.gpio = DA850_USER_LED0,
+ Y7 N/ B/ z. }1 v$ Q/ t .name = "user_led0",' `- c" C- V2 }, g- M# d! k: `4 Q
.default_trigger = "default-on",8 H" i7 e9 x8 E {7 P
},3 r" ~9 j- L* N4 R. Z+ ^
{( ~) h9 M) k1 L) r9 j& x% s- l
.active_low = 0,
* o4 W$ E- N' q% j& T T# V" | .gpio = DA850_USER_LED1,
% @: C; y: {/ ]" v; ^' o+ @" m .name = "user_led1",
1 e8 u# x) i1 v5 Q+ {4 x% d .default_trigger = "default-on",
+ \$ A1 F9 p( z },) @/ k1 _/ g2 U$ s$ [% b% j
{
# X! f! o6 d9 \# Z2 `" v+ K .active_low = 0,
& A; U0 X1 m$ i: v9 I/ w* { .gpio = DA850_USER_LED2,, E& k* j* r! O) S- `
.name = "user_led2",
& e' k0 ?9 H" ]$ u4 C2 y .default_trigger = "default-on",
5 m y9 Q" f: {8 a },
0 V8 D2 i4 Z6 |! }, v6 }/ `: p {
2 `) Q2 `' N* U4 J .active_low = 0,
- V, Q' D7 m0 C .gpio = DA850_USER_LED3,
( A7 ~# ]- Y7 { .name = "user_led3",8 }; a G6 Z- j Z
.default_trigger = "default-on",
3 h! k6 S! l; W( g6 n },
+ L, S7 D9 [& f* I! g. _};( G; W: |7 Z, R
3 [4 m! _9 r/ D8 z. w
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! k/ C1 z# O5 u+ E- R2 A, x .leds = da850_evm_tl_leds," i# I% R7 y: h/ {" N1 B
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 w) Y1 M* s- s+ K};
2 ^; J l% X* i& A
9 R/ ~, s" i" |) o, J+ `% A. w1 Estatic void led_dev_release(struct device *dev)
0 A6 Y! I1 `3 \" y7 C{
& `5 u5 T) ~* K% u};
2 U6 W0 {' b" S( k F7 R8 H- V
! H4 X3 W0 ~5 `static struct platform_device da850_evm_tl_leds_device = {5 t8 V" y# E5 _1 A' X/ |* [: G
.name = "leds-gpio",
1 ?1 p( S6 @5 K .id = 1,: b" A" W; k0 `4 j3 d+ |
.dev = {
* D5 [( W& e8 F9 V. m$ k h% ? .platform_data = &da850_evm_tl_leds_pdata,
( s( O3 G5 c* n& g& ?) P .release = led_dev_release,
# \. w2 n' H* ` }" v+ }6 p" |* | |! Q
};
+ |' W* z2 V- n* y' z
( g( P3 X$ F/ d `& c Sstatic int __init led_platform_init(void)
8 r4 S5 f m( y. [* `& c{
( O: S, |6 ]7 v1 U6 j5 l int ret;
3 ]: G0 i* T3 _/ Y#if 0
! b8 q2 m- h9 r9 Z' m" ] ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, \' U% h8 O3 U8 t. g6 Q
if (ret)
. A' z; [' H* o. T. Q9 b+ S5 x; P pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; R7 ?1 a3 @" V% a/ X/ m
"%d\n", ret);
4 X8 [& R' x. Q [#endif
% q; W+ u3 m _0 V( v- v ret = platform_device_register(&da850_evm_tl_leds_device);& Z9 C F* q0 ~5 X1 m' N
if (ret)' Z6 O3 c% I S' T" G, [
pr_warning("Could not register som GPIO expander LEDS");
" A \) V4 _7 w- @- O% ^1 m# y1 X. M else
9 y7 ]8 w3 e2 ], N) | printk(KERN_INFO "LED register sucessful!\n");
! n* t" W' c& S" I* `5 H
% X$ @4 C& N1 T# Q- N return ret; n3 e0 g1 u; j* u
}7 ^& N9 O: N1 W
4 K W+ l6 D6 @0 V5 s" h! Istatic void __exit led_platform_exit(void), O8 j8 j: H5 c* O
{
8 g1 \! G- m7 W! o% Q platform_device_unregister(&da850_evm_tl_leds_device);
0 g! r' F$ I4 |/ L
; I4 v) h- ?5 j printk(KERN_INFO "LED unregister!\n");
( ~; i* x4 C5 L7 X5 k+ C}+ t3 h1 u; q6 {- F9 f+ \1 y
% l1 Q6 q E; E2 d5 p. \! |* Smodule_init(led_platform_init);) o! y5 p" D5 ?6 V* n$ X6 Q
module_exit(led_platform_exit);+ s, Z# w5 E$ O5 E0 ?3 _
# u& S: |4 e6 Z4 K" tMODULE_DESCRIPTION("Led platform driver");7 ~) Z, I, Z( D8 L# ?
MODULE_AUTHOR("Tronlong");/ N. @) p. D: O# s) e
MODULE_LICENSE("GPL");+ z2 ~: i+ J# j$ r, y* Y
2 v: x2 R% X5 k: V/ y |
|