|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 i5 Y9 U' p* `2 Q7 `, J
#include <linux/init.h>! Z6 |: y- l7 n! Z' I3 G2 r; H: m" b
#include <linux/module.h>5 A+ a3 n2 z! z( x
#include <linux/kernel.h>
8 v7 a" K8 T+ x2 q3 p#include <linux/types.h>2 e$ o9 `3 ?/ `9 u+ E
#include <linux/gpio.h>$ r2 \1 A6 S k
#include <linux/leds.h>, j* {1 h4 n' q5 N6 [1 I3 |
#include <linux/platform_device.h>
5 ?" [$ X7 ?' }5 {+ z! W4 v i
1 e+ m3 X. p5 C9 |8 B; Z. |% y#include <asm/mach-types.h>+ q4 S$ T, Z" ^
#include <asm/mach/arch.h>
8 Q: c: v# {( K, {' ^/ s- S0 I) U#include <mach/da8xx.h>
2 r. Y$ k+ D! D$ b9 w#include <mach/mux.h>( y G- N' l7 |1 b
8 O0 Y3 C8 p; d: q$ k/ B1 J/ A
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 A: Q- i n/ ]; l6 J
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): O! n0 a- j! ^. z1 X- t( @
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 N( ^) m5 R& v' c: e7 v v
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* ~% B+ S# b6 ], M: [4 t/ w$ A: d( e! j" f6 K, O$ H/ b& C
/* assign the tl som board LED-GPIOs*/
) u9 w7 n, Z7 F0 Y! k1 K9 hstatic const short da850_evm_tl_user_led_pins[] = {! Z% ~! n8 h( f2 Z9 i
/* These pins are definition at <mach/mux.h> file */
8 c6 y* N7 s, D# S DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 Y' r; j& |# \3 s -1
/ u) h3 f. O# p! e- Q};
( j' ^3 [! ^- m* _
* L8 u: o; `+ a; s7 Y% Zstatic struct gpio_led da850_evm_tl_leds[] = {( u; U: ?0 a( r u( J; _5 J
{9 H7 Q' Q( I; S1 P
.active_low = 0,: Z* W; t2 G9 v
.gpio = DA850_USER_LED0,
" y& n3 _; `' Z* {1 c .name = "user_led0",
0 m z; s: C8 p8 ? .default_trigger = "default-on",
5 A0 D4 J6 ^$ [1 T# B0 a4 d },
! x# B$ m! c* F5 Y9 u {5 F! |! |/ d+ `& E* ?
.active_low = 0,2 f4 D v2 o1 V4 t& d
.gpio = DA850_USER_LED1,
* G$ r0 q: C# V3 S .name = "user_led1",# B; S7 r x8 M& A+ h
.default_trigger = "default-on",& V, a- I8 F4 B. H) C
},
( `( ~! X+ d2 D {
" w- p6 a# {8 P \; V .active_low = 0,) X( B2 S7 b5 g8 Z) s
.gpio = DA850_USER_LED2,
! p; Z! K/ U; `4 u* X; K' x .name = "user_led2",4 R8 k3 o5 l# b9 E
.default_trigger = "default-on",
/ G9 Z4 k) B3 @: b },
. \% d9 n$ {. @# g {+ o% d P+ i' S: x1 r
.active_low = 0,/ [8 ~, G+ v" w$ m: `
.gpio = DA850_USER_LED3,$ c7 c5 ?. g; `3 {) {" \4 p! l; C% `8 u
.name = "user_led3",
$ `: T2 y r/ D9 D1 W .default_trigger = "default-on",5 N) m, m# {3 i8 j
},
7 K# n: b. T; P};
" d2 V+ B4 ~3 q5 ]
3 h0 g0 Z: h( q7 [& ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ w) X0 f2 j2 I; W3 h .leds = da850_evm_tl_leds,
0 w( k* [2 G# Z6 j7 V' P# ^" O" b+ K .num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 I* ~3 U; Z6 } |, v6 \
};
$ v$ @' N4 H O, ?% ~6 F) q% h" Q F7 c- Y. ]1 l# y' P
static void led_dev_release(struct device *dev)
: I U. o" I4 X6 x+ l8 _$ F' A) F{* ^& g7 N% ?0 q8 s. G
};; z$ L4 b1 V" i/ a
& a. ]! |; y- ?0 W+ {% ^, @: vstatic struct platform_device da850_evm_tl_leds_device = {& z6 O {3 b2 f, m
.name = "leds-gpio",' r5 B8 R7 c" i8 s1 @1 F
.id = 1,. x1 x5 d* W7 S6 b( o& ]& O
.dev = {8 V' h! ?, M V/ V6 J
.platform_data = &da850_evm_tl_leds_pdata,1 ^9 f1 A" k# L- J
.release = led_dev_release,* ] Z6 E' b! ~5 q3 X9 {
}+ i: ~5 f: v% \8 i7 M. q
};
+ X& W% {! v; X" n( a" s+ k, _, G( d2 p+ i g! b
static int __init led_platform_init(void)- `- T- b; L* S
{
( e+ H7 F E) m int ret;
+ B0 G9 A) U, F0 Q& h0 D7 O#if 0
$ Z% [' o5 R/ G4 s ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 l7 K+ C3 P1 w9 Z$ p& ?( F
if (ret)
0 c' B, @7 q Y5 A pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ K( b# N: v) [9 D0 B1 h) a6 i "%d\n", ret);5 @8 o! C: Q& }" S' L g" |; ]" ?
#endif2 m4 b: e* h# | l Z7 C/ I
ret = platform_device_register(&da850_evm_tl_leds_device);
! j8 u4 [# o. z- U1 |! }- A if (ret)
8 w5 |, M; D: c6 W. E/ O+ v pr_warning("Could not register som GPIO expander LEDS");. }2 U r& z; y1 [
else
7 V3 [# z; y2 T0 e) O6 J* T printk(KERN_INFO "LED register sucessful!\n");
- p2 t6 W* W: r8 F. z" z/ A6 Q5 a9 O( q. j. G; v* H3 N9 ?6 h9 b7 x
return ret;
0 Y: G% e2 t0 i, V( F& i* L" R}& G* Y" q. y! O1 P
- J% o! Y8 @3 D! \) R0 _3 t) }# b
static void __exit led_platform_exit(void)1 A" x+ U4 s, J! S4 ]0 r
{- ]1 G N" q( z V* A
platform_device_unregister(&da850_evm_tl_leds_device);9 y' l/ Y( L8 e7 ?3 c2 B* k& x
8 N) |+ P( M* [0 ?5 p/ A printk(KERN_INFO "LED unregister!\n");
2 Y2 t/ {0 x5 P. ^}2 d) X) o' @. {2 m+ K' ]7 a( X
4 a; D( O) l0 `8 E& Mmodule_init(led_platform_init);# F' Q" X$ `( {: m* A
module_exit(led_platform_exit);) O0 y! `/ ^# B+ a+ v6 I
. M6 Q! G5 s2 ~; N* M1 t
MODULE_DESCRIPTION("Led platform driver");4 p9 X, i: y7 \
MODULE_AUTHOR("Tronlong");0 m& G6 G) C3 b3 s2 q& u
MODULE_LICENSE("GPL");! @$ O# {3 o5 `2 z) j
: A; U' d) h! G% ]' ~# k( T4 @, r |
|