|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# F0 Q1 u' C. M/ O5 c#include <linux/init.h>
9 G+ X' S N8 {; l#include <linux/module.h>6 Z T- o3 ?8 |! g7 n! M! |
#include <linux/kernel.h># S) e8 a' }! u# p5 R( W* Y3 i2 L
#include <linux/types.h>" [ K" W' X) ?) f
#include <linux/gpio.h>
2 y6 \' W2 i2 S5 c" x#include <linux/leds.h>
# Q* P: `1 n% \5 D) @#include <linux/platform_device.h>9 u$ m) h; d! Z; l: j: c2 h
# C+ ~8 t# u2 z8 V
#include <asm/mach-types.h>0 |/ S& E2 H% V
#include <asm/mach/arch.h>& v6 h9 V4 {! V
#include <mach/da8xx.h>0 s' `! _+ {+ M" y
#include <mach/mux.h>) N/ t5 y2 m9 C' H
- S2 u0 }8 t3 Y/ w$ y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 m" c: u8 y% V6 U3 |) y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% h- R4 u6 c# q( q/ _#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& d2 E0 B) S; ]/ }8 L- O' s& g* y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 L# ?' Q4 H$ W* s* v
% e) v8 Q* }( g8 u8 b
/* assign the tl som board LED-GPIOs*/
7 G; }& N3 S& B i( x: o( ^static const short da850_evm_tl_user_led_pins[] = { F+ w3 X6 o8 E! G2 I6 x/ j
/* These pins are definition at <mach/mux.h> file */
! S" r, g. Z( p! C DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 D$ Y- F& {& V# A3 O5 h |1 d+ B
-1
# h j5 X- Y' q/ q/ |" q};
# h: n1 \. m3 J9 q" o: Z' X5 \8 K: Z7 F9 N V# U. @$ J0 s: g! W
static struct gpio_led da850_evm_tl_leds[] = {
+ u- {2 o# ?7 d {
9 T) U6 `+ C4 H .active_low = 0, r, A* [3 D/ j2 h, _1 i: h& b2 p5 M
.gpio = DA850_USER_LED0,
9 z# Y: y5 s, W .name = "user_led0",! b$ \ N! s0 l; V- u0 W6 c
.default_trigger = "default-on",
, j5 Z3 ?4 q$ G! l5 g0 h },
& p, U D3 \+ M, O, q {
3 E+ \% o0 i( u: N% _* \2 d- A7 \/ } .active_low = 0,& Y: x" G& n' ?, F0 W: Y5 C* y9 i a
.gpio = DA850_USER_LED1,
2 w' t2 L& D; s; F0 V$ q4 g .name = "user_led1",
& N5 J# g4 Y" z6 q, S; V( f .default_trigger = "default-on"," i7 I3 t; P) l+ x9 x& Y
},
8 b+ ^/ h9 J8 p9 t {
9 v; h6 E/ ^( z5 T .active_low = 0,, T; x/ z: a* e9 ]9 F! |
.gpio = DA850_USER_LED2,# R+ ~/ u; ~! K! D) |5 C
.name = "user_led2",
" U, L0 g+ V8 d9 |( q; p. Z( u H .default_trigger = "default-on",+ P5 C6 W$ Z/ S/ l- P- ?
},
0 _$ f( b2 d( `3 S& y {
' l+ w, ]: }! k .active_low = 0,
* B, T! X7 n6 ^1 _. H4 t8 H# u .gpio = DA850_USER_LED3,
7 G, P1 b5 t1 u# h .name = "user_led3",0 d) m3 H2 ~$ J' X0 j8 ~4 {
.default_trigger = "default-on",
8 z3 J1 f5 C; u) ]6 V },
. w& H* [9 v2 q D& q( K1 Y};, k( x7 k+ _" X# s2 ~0 i
$ |; e2 Q" A- \; Y9 L8 {
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 H- D, C: o" Y9 e0 | E$ P4 d
.leds = da850_evm_tl_leds,
- H* \( W+ t5 O2 _" `6 o .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 j* e+ s3 s1 ]};# [# W: J# v$ I, P1 s
. K6 Q- s2 R9 Z7 ystatic void led_dev_release(struct device *dev)
% ]" U8 {1 v0 J" y{' B( a1 Z6 Z+ W. p, `2 z0 h
};
4 Z$ p$ R! Z: N: u' r% [+ B- M- m* U h& B
static struct platform_device da850_evm_tl_leds_device = {
9 @' \$ y+ u0 x* Q5 p .name = "leds-gpio",1 m( n2 e, ^3 e K# k. Q3 {9 B( K8 Q
.id = 1,
u7 s" p2 \* d8 } .dev = {
- C, w! l+ p! ]3 e4 I2 P W4 u* ?2 [* s .platform_data = &da850_evm_tl_leds_pdata,
/ N6 E. J& o" b: h .release = led_dev_release,
2 _& E& R5 S0 y; S' F5 ~# G2 t }
$ u6 m9 ~4 |* }" T% l6 n};
6 {3 q7 T: X. X8 h- {4 J$ q: M1 c1 B4 g
static int __init led_platform_init(void)$ o t! o: i1 t P: A* t. H, o$ u
{
2 f' g3 r! c5 M5 M8 x/ s+ W int ret;; L3 k( i Y" _, U
#if 0
; a6 t0 }% C0 Y% B ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ u# P% m9 d$ U" l1 O, R+ V
if (ret)
/ V' i; Y! R) O8 C! b4 Q1 ~; g8 @ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 Z! D/ j( X4 y! L0 t "%d\n", ret);
$ T7 [- Z4 r6 q4 t6 p& E( D#endif
) G3 n5 O$ H9 k& G ret = platform_device_register(&da850_evm_tl_leds_device);* @/ t% u: n- O+ O
if (ret)
! N' }# t1 X$ j E7 ^2 e% c$ s6 v pr_warning("Could not register som GPIO expander LEDS");$ [. c ?2 M8 }/ v* r
else3 [5 D a4 |. R+ p: U5 u
printk(KERN_INFO "LED register sucessful!\n");9 p& z9 y6 W. l- R7 `
! |, |/ l* k; Y& q return ret;
) _+ M: n% F: u# _/ h9 n9 X& h6 y}
$ p. ] B2 R9 Y$ C. y# f, M
* z# x7 p4 G s% G; sstatic void __exit led_platform_exit(void)
0 X+ k8 ^0 `1 ]{& m3 {& T1 Y# p3 a
platform_device_unregister(&da850_evm_tl_leds_device);
+ D1 b; z- ]( N3 N
7 j' N" s3 F# L* d, b0 g; K5 a printk(KERN_INFO "LED unregister!\n");" T/ ^% G2 m5 k9 H/ }
}# n/ N/ r3 |! M& Y
! U8 _8 X( f6 k4 T9 \ w
module_init(led_platform_init);
" k9 n) [6 ]8 vmodule_exit(led_platform_exit);
+ L8 b! I |5 v5 G& }, L- G; c* v
' z2 p4 c! y0 A3 ~* [! |MODULE_DESCRIPTION("Led platform driver");0 l, R9 f5 `# I- f A& m
MODULE_AUTHOR("Tronlong");
# t, s8 {) K% I9 M: yMODULE_LICENSE("GPL");0 `" s# L# g2 T
. j6 Q6 {; \( \- Y
|
|