|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 U0 g/ Y' r- U5 e
#include <linux/init.h>7 P% P* i( A. t3 d; D* D
#include <linux/module.h>
I; S) J) }1 X: X1 a4 S }) U#include <linux/kernel.h>5 K1 |3 G8 c% M- @/ h" B5 q
#include <linux/types.h>
g5 z1 L) _. j; ^0 r#include <linux/gpio.h>
4 y! Y" y3 N& @3 d7 V9 c* z#include <linux/leds.h>9 G+ t4 F3 H- g1 }! r- \% z3 }2 k
#include <linux/platform_device.h>
5 s9 R O7 a: I
, N( D9 C+ X- J1 g+ I- h8 A$ y* O#include <asm/mach-types.h>8 F$ b1 W+ J, h) \" m$ @
#include <asm/mach/arch.h>5 @8 R5 g7 I- F7 I3 L0 T
#include <mach/da8xx.h>
* b5 ^8 b; i9 ]' J* l#include <mach/mux.h>
* [ ~) B* e) N! z. q( n9 x7 a0 z; Y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% e* x5 X8 N& h q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& ^- `0 m9 w9 e$ `
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 q( B" Z- u5 {- F* z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! t0 a3 ^3 k. Z1 f) v3 x
5 `- g9 F% W4 w* z* g1 `
/* assign the tl som board LED-GPIOs*/- z; s) _# Z7 u
static const short da850_evm_tl_user_led_pins[] = {8 b5 ?( V' W7 A! X
/* These pins are definition at <mach/mux.h> file */* v% ^) S$ E5 k4 z+ P
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ m. J: D! @1 m3 C
-1; V9 m4 H& a! x. }6 U1 t
};
0 e- L3 b. X, P3 B; q9 p* }, i1 m* y& U, `3 r2 Y/ r
static struct gpio_led da850_evm_tl_leds[] = {
# o" c3 x( g5 Q4 u {
9 ^7 ]# [1 j& U2 W1 i .active_low = 0,! |) g' z) O3 L
.gpio = DA850_USER_LED0,5 L$ C; Y6 l7 R. s" T( r
.name = "user_led0",9 W$ h" d- e* k5 G6 q
.default_trigger = "default-on",
8 _! [! K1 R* l. l# A; G/ L },
9 o2 N# Y, Q! I5 |# S7 L; H5 k {
+ r, T" `# g( |5 [8 z .active_low = 0,
' Z" d7 X6 d# p5 `9 L: T1 g .gpio = DA850_USER_LED1,! D3 ~5 X [- s' W" j( H4 P5 J: v
.name = "user_led1",3 D% e' X! O$ v6 |3 |; p6 X
.default_trigger = "default-on",
' a8 v0 O! r, w: Z },6 o4 x* q/ c7 r+ i% k7 \
{4 H8 }) {! y% u2 d# R
.active_low = 0,
9 o4 k6 ]4 I" ]6 J .gpio = DA850_USER_LED2,
: X' x7 O, U: n, j: f. ?4 e" c .name = "user_led2",& q6 H3 v( A$ o6 O5 b3 k8 U6 z
.default_trigger = "default-on",
, W K7 q7 X8 R3 G* E },
& E3 p1 X$ {+ G' [9 r {
2 |: l% U, _( a& c8 o7 v .active_low = 0,
1 |1 C- ~1 ~ ? .gpio = DA850_USER_LED3,
( I" L& D; x/ o; C. {/ d) Z .name = "user_led3",
$ ~. t! u' c5 y7 f1 A .default_trigger = "default-on"," ]$ k g& s( k; t2 N
}, @ `; N) u$ {! g! Z; c+ _
};* d) A# y+ W. z: r: ? b) ^7 Y( _
# L, H, P& Q+ Z7 c6 z! f
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 j$ {2 `% C: B% C$ s* u
.leds = da850_evm_tl_leds,
: a( {; G& D) T* N2 W) j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. A) M! j7 u g5 z1 D};
) R5 O. `- y( q& R! }$ \. q) e. }) T8 ^" N0 ~1 w8 J
static void led_dev_release(struct device *dev)- q4 x/ g7 T6 g1 [: m
{
h" D3 n1 ]) D& ?};
9 [8 w1 j( P0 C1 k1 u
1 U/ E/ n) R: _3 q/ |6 gstatic struct platform_device da850_evm_tl_leds_device = {
; M w/ s% e- Q: z/ a" Y .name = "leds-gpio",
7 K: h- C/ G5 y- q# M6 U& y .id = 1,) v: Z/ E, ^8 e G$ l5 V
.dev = {) y5 j/ G# Z& C5 F+ L
.platform_data = &da850_evm_tl_leds_pdata,( I j1 ~& _) d! d
.release = led_dev_release,% S, s5 ~& U+ l+ y4 ?$ J
}
; a6 t% A+ c" X5 o% z};
( v7 U ]% |7 T9 U
! \8 i2 W1 y6 y' S* I: Zstatic int __init led_platform_init(void)) L; ^! V/ ^5 V6 C# v( B# F) D
{
* l% \! S/ p: _ m int ret;
$ B- F5 W- c3 Y2 q' I' J t; W/ e#if 00 |: @$ [( `* @/ }; e/ H2 Y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& M1 A7 W) S% Z; ?
if (ret)8 ^% i1 J$ _$ c
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& D9 \1 ~6 Q2 V" s% ]0 A
"%d\n", ret);, P9 ?% U8 q& `, }
#endif/ |' [3 y/ y: V" o
ret = platform_device_register(&da850_evm_tl_leds_device);/ k' c+ ^5 Y2 a- e
if (ret), a* N" V5 p+ v2 f
pr_warning("Could not register som GPIO expander LEDS");( j# _' q( W; |% G+ @
else1 y5 \0 h9 Z5 c/ a/ j
printk(KERN_INFO "LED register sucessful!\n");$ [) @( R+ R+ C8 `; O+ U
. s4 X- t& |& G; q* w return ret;
4 i/ @/ N' h, K+ c" N}% K2 m* f8 F, V* I5 ?/ Z+ M, ~
" E8 m" ?' x% E5 rstatic void __exit led_platform_exit(void)
; ^7 t, g+ U6 g{6 n* z: z) K& I( c& H# `# q7 U* B
platform_device_unregister(&da850_evm_tl_leds_device);, J( ^ M' i$ k' H7 U+ |6 D
! y9 n+ N( K, X* \3 d) j" { printk(KERN_INFO "LED unregister!\n");
# u! L, Z2 x' R' {. V}) Y; }6 I; p; }& D+ @5 U
" S- W5 G% n0 U9 g T1 J
module_init(led_platform_init);
/ O! j9 Y$ x- @$ B, n' Zmodule_exit(led_platform_exit);
$ j* W# b/ ~3 n* Y8 @ C; e3 B t- a) Q+ B6 S
MODULE_DESCRIPTION("Led platform driver");
( B% j& J3 ^" o1 [MODULE_AUTHOR("Tronlong");
' d. o C" Z+ lMODULE_LICENSE("GPL");
4 i* O' v& ?8 x
' X* X1 ?6 ^/ q; F2 c |
|