|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ {- X8 l5 P! z1 H2 n" M#include <linux/init.h>% \4 ]/ A$ d* s
#include <linux/module.h>
$ Z, i! S! Q7 B# r z* m; v#include <linux/kernel.h>$ w7 L5 i/ {' {. Q
#include <linux/types.h>
% } K2 ^* n3 y- D#include <linux/gpio.h>
, k3 W1 m/ n4 ]' l; B2 ?+ Q#include <linux/leds.h>
/ {/ p; k8 h6 L: |4 r% w4 f#include <linux/platform_device.h>8 n9 Z k2 G+ {, v$ \/ e3 D$ ?! q
" S& q' f7 g9 h( g2 h9 ^6 ^
#include <asm/mach-types.h>
, e% S- M6 ]; ~#include <asm/mach/arch.h>8 E0 U: E) v% l' U7 ?! r
#include <mach/da8xx.h>, |9 V5 c, M- w# w, N; O, }
#include <mach/mux.h>
" m* Q- W, |) u6 X% G1 W& Z* E- B' C) ]% D( g* i! x; H) q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ l v' M: u0 B! x: x5 f#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 t0 Q, p, ^5 R( L#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 t+ a1 @& b$ B+ M8 m3 \#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" K/ n. @9 {) L. |
! W) Y# I3 S- {; Q7 S& v
/* assign the tl som board LED-GPIOs*/ h: `" r" V0 h5 I; |
static const short da850_evm_tl_user_led_pins[] = {
, C& k. j% @ d& i: Y /* These pins are definition at <mach/mux.h> file */) {, a( ^% u- b. _. f' x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 M) ^& \# r7 C1 |7 U" [ -1( z! M$ @1 O' `/ r% y7 a" ]* k; c
};
& \! U0 Y& Z: I9 v# A% a$ c* c" @
static struct gpio_led da850_evm_tl_leds[] = {: ]( C% E3 v l
{ r7 W" V& A1 W& s, l
.active_low = 0,
0 ?" J& X6 F" T8 H" A: M .gpio = DA850_USER_LED0,8 c% \3 k" ^0 r0 h7 M7 [
.name = "user_led0",
$ @6 A! c4 Y- L7 l .default_trigger = "default-on",7 v4 s$ `' B4 D! e0 _2 N
},
% z7 U3 p+ d0 m2 U& K {
3 i5 R/ R- N+ k2 j3 Q4 d .active_low = 0,( o3 h$ p+ S c9 C3 E. S7 Y
.gpio = DA850_USER_LED1,
* g" k8 r- X. {1 j .name = "user_led1",
3 S3 a8 F- x# z4 ? .default_trigger = "default-on",
6 o0 f5 e- k- ~5 s* v; Z },0 p ~8 G, ^* K2 e
{6 }# M( b% M( j: v7 s5 D; f4 j+ z% j
.active_low = 0,8 ]3 i3 ~ Y) v. Z5 J" j- ]/ j+ ^2 b
.gpio = DA850_USER_LED2,
: }" ?. `% e0 s" a3 y, ^ .name = "user_led2",! a2 N @' j( m: ` u
.default_trigger = "default-on",
3 }( G8 _+ d& P) a- G },
6 e3 @0 N6 R% Y$ M1 f {1 T2 M. ~) J! R" U3 u4 [
.active_low = 0,
+ ?& F1 ? f% a D/ W .gpio = DA850_USER_LED3,4 I) j7 `* _$ H; n8 x; p
.name = "user_led3",
( }) U$ a3 a/ |% [2 h) X .default_trigger = "default-on",
6 h4 E+ I/ a% r4 [1 b },0 J# f+ [# U' `+ o8 Y6 C0 p7 ?
};
( g) _9 C, `$ m: X: R" u; F4 W/ {/ L" Z" k1 W1 Q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 k$ q" s: H7 ^6 v' n. J
.leds = da850_evm_tl_leds,
7 P2 M# v/ {" B .num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ Y+ `7 c7 y d3 F* H
};* p1 [( L" e7 }% s/ d
1 O1 U; l+ M" Z" K# G6 Sstatic void led_dev_release(struct device *dev)
& @( q" s) V( F9 o; P, Y{" s. ~. ^0 \5 T1 j" c" h* W
};" q# {+ M+ z; B L8 |& p d% E3 d
5 d9 p H! {7 J% l) |
static struct platform_device da850_evm_tl_leds_device = {4 W; f% t! ^4 `* D- m8 ^
.name = "leds-gpio",
) ^% E4 C) v# F! b: b .id = 1,$ u& E" d2 s/ T6 h* Q- v
.dev = {1 T) {: \9 v+ n/ O4 W0 p1 n- o% m
.platform_data = &da850_evm_tl_leds_pdata,
0 ^0 u, O2 [$ Q( e1 ^2 G .release = led_dev_release,
& h! u3 K4 \. Q# m2 p }
3 Y y- n) G: Y- t};
2 p: B. x) x. y3 a
: J) T1 |; {9 h: b. Z1 jstatic int __init led_platform_init(void)* r8 t* Y/ H b3 z4 h. ~- s0 Q
{- u. ]7 Q1 B. ^
int ret;, s( k" c4 u. m( `
#if 0
$ [- @) q) b% m$ l5 O# t ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& |0 E1 t% U! O1 i3 S. R4 @& O if (ret)
& \* h* K9 Q+ i& D pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- t; K: O: H7 m7 k "%d\n", ret);
9 F% w3 o: s" _+ W8 O#endif
5 p$ u" [0 f$ S ret = platform_device_register(&da850_evm_tl_leds_device);
9 k. X% X( ^- j) C6 g3 X' ~2 S if (ret)
$ H3 ?9 Q2 g4 g( E pr_warning("Could not register som GPIO expander LEDS");
. j/ ]0 s: {) t: [ K else
; w4 ~8 Q: {. Q' F K9 U8 z x printk(KERN_INFO "LED register sucessful!\n");$ v6 j1 M* z" e m
9 O. I2 ] M( c5 x+ W
return ret;
! l6 s. {; k# f}
8 Q3 V4 b$ a7 x: ^5 ~& ]$ y. f0 w2 x/ m+ a
static void __exit led_platform_exit(void)
; g6 J5 m& ^: c/ m0 f1 m7 e$ P- R9 R{
' \% i Y( C8 G1 s, ~ platform_device_unregister(&da850_evm_tl_leds_device);% x* ~# d. @7 x$ i/ ]. G* A/ ?
6 J. P' h0 k q0 W; s1 N, j printk(KERN_INFO "LED unregister!\n");9 M$ h- G, ]- h' z
}% q* P* I+ P: g& C
, K% ~& V0 J0 h1 z3 x# i0 _5 E- A g
module_init(led_platform_init);( F. C+ C4 g4 i4 ?8 z* d
module_exit(led_platform_exit);
% G; K) G2 D& _3 ?: T
. r& T9 T V: ~MODULE_DESCRIPTION("Led platform driver");
5 L% G1 m, b/ p9 R, B+ xMODULE_AUTHOR("Tronlong");
$ X0 n: q- k3 l) I. p5 dMODULE_LICENSE("GPL");% b t* Y$ ^1 ?2 m) K9 R
2 w+ R) s$ {* m
|
|