|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
t% w c; K _/ e; w+ \& a#include <linux/init.h>
' |+ o/ z" Q5 I5 u+ h' J#include <linux/module.h>3 a; h0 X: M+ O0 Y
#include <linux/kernel.h>+ G& a7 w- T( B2 o* u- C6 C
#include <linux/types.h>: H& X5 q, F; E ?/ c* R5 d% b5 q
#include <linux/gpio.h>
7 j; J4 x2 M4 D3 A9 h2 l#include <linux/leds.h>
/ r7 A7 |8 c/ x( Z# T#include <linux/platform_device.h>. t: [' @% k2 f7 n$ D+ }
; M; I! ~ B( O' v7 D#include <asm/mach-types.h>
1 t$ S. i( X: ?- y3 r$ G0 `! p#include <asm/mach/arch.h>8 b Q6 `5 Y" D4 q& o* A
#include <mach/da8xx.h>
0 w2 K# g4 |: N" k( A& M#include <mach/mux.h>* C, F/ H" v4 O3 v- ^' R% u
1 H8 s% w( e( W) z- f3 j#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% v! n8 H* R- G4 {#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 C N( P8 L0 I' m K4 a#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 C* s! \! i. R g4 H% O z#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 k, o. g& q! ~) F& H
1 U7 q$ P7 j% Q, N# j4 b* d; W9 X. g/* assign the tl som board LED-GPIOs*/
* s+ @$ o" S* ~/ X3 N2 U# Q' Pstatic const short da850_evm_tl_user_led_pins[] = {8 s) M8 i7 d0 m3 i: _
/* These pins are definition at <mach/mux.h> file */
- q# n/ B! o. N) C: b DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 u" q$ V: D6 L0 w7 T7 L$ i -15 D N- k- S: ?
};& ^6 m( E/ H, G$ _! M
n8 G6 S% O2 t( }
static struct gpio_led da850_evm_tl_leds[] = {$ t3 N; V S* y2 Q8 P! S, g
{
' n5 p+ s# I& ~" M+ F' F* q0 P/ _ .active_low = 0,* E2 \/ ]8 }" c
.gpio = DA850_USER_LED0,; y5 H# D+ X6 @& b0 Z$ p: e3 T: M+ k
.name = "user_led0",% n8 @- W/ S* G8 ]) H5 H4 L
.default_trigger = "default-on",( A0 o0 e. ?) _. j
},* ~" V5 ?: X$ P& E1 g( W- h/ f4 V
{' ~* A% }1 V' F5 O
.active_low = 0,
! C6 y" p9 w+ u0 F1 j. Q .gpio = DA850_USER_LED1,- v0 g5 I b4 E9 a1 ^
.name = "user_led1",/ A5 Y1 u) f( y) }* g: J
.default_trigger = "default-on",' H$ w+ P' w9 R
},( z. P& x4 A/ R! [# Z- N" m
{
* u1 R6 b3 g0 j8 i; u1 w' \- [ .active_low = 0,
/ M% F: B i# p2 o; D, S .gpio = DA850_USER_LED2,
% A1 g/ J: `" ]% H* L7 L ^$ R .name = "user_led2",* O& Y& j+ ] v J8 z% Q% M
.default_trigger = "default-on",
2 s/ g6 p3 e3 B# \" o% ?6 I+ g7 c },
, c) D$ T {& e4 k {5 Y2 d9 _) ^# j P" i7 T. H' F
.active_low = 0,
8 t4 P9 B2 j% @4 x- ]& K .gpio = DA850_USER_LED3,9 q# c& T/ k4 O
.name = "user_led3",
U+ C. b$ t: p1 u& |1 j .default_trigger = "default-on",
( ?8 r, ]3 f8 O8 [0 M: O' ] },
) I4 m8 E: Q* q9 U" b% }};
2 S5 M0 Q/ ]0 V( d
3 W C& c0 f% B" n* ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 S, P9 ~ i2 i5 t& g
.leds = da850_evm_tl_leds,' |- P3 U' X" W. Y/ p- ^& c
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 m& @ E2 @. s};2 c3 G. G0 X% O3 h. w
0 B3 _' h& l3 z. X; o& C
static void led_dev_release(struct device *dev)
) J3 j; Z- y: d r9 C* A{" r: c) x. d8 H1 q" c
};
! V2 B5 U! U+ {% l& a9 B/ \( p
W* h- T" F; a: ^7 G, \static struct platform_device da850_evm_tl_leds_device = {3 K8 u! [/ j3 Z& j$ Z# ^
.name = "leds-gpio",
# [6 n& k/ d7 Y/ w .id = 1,
6 \* a# ^9 K1 _4 Q+ ^* [: n .dev = {" Y, I: Y) t* J8 R0 W
.platform_data = &da850_evm_tl_leds_pdata,' r* n6 {7 V0 Z) ~
.release = led_dev_release,
8 g& j0 d) U) V: F+ Y% H8 h5 I }, G) z6 d# I! E. C4 H( l8 v
};
% u/ h( S' o) @$ ^2 B4 s7 q
7 Y4 B+ T+ z! I1 S% @$ Zstatic int __init led_platform_init(void)* C( l) k' G) k4 G
{
, i+ S' M2 h5 ?* T int ret;
$ i! T' N) l: T/ L/ N4 x1 P* W#if 0
8 _+ V8 U" N! ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* I+ U2 _/ @9 |' Y6 N if (ret)- n; {7 _, J% C3 [
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 G& ?- I% _- A" ]& K "%d\n", ret);
" C7 x) }; i2 @+ l- r: M#endif
( ]6 W/ S7 [6 r& x, S ret = platform_device_register(&da850_evm_tl_leds_device);5 c. e8 @- N e
if (ret)2 W0 x" l/ F! `$ e
pr_warning("Could not register som GPIO expander LEDS");
/ t( @0 o' D" Y else( }6 V1 H/ M4 |+ y3 M* T! e
printk(KERN_INFO "LED register sucessful!\n");
" @. d/ B$ _2 _0 ^1 p7 ^2 \# K) j
& y9 f5 b( {: n: l& q; @/ c return ret;
* ?9 b+ T5 Z, J8 T. ]1 N}
. e+ D8 @' s$ d! u4 V( j! u% m6 j7 Y% z$ {" @) q5 i# [) x
static void __exit led_platform_exit(void)0 v' \. _( y+ x+ R' _3 G# V4 h
{8 N" y9 A1 \: A- h
platform_device_unregister(&da850_evm_tl_leds_device);2 k2 ~8 u6 U* e4 p `' {
) y- p- f$ l8 B7 } printk(KERN_INFO "LED unregister!\n");
; `3 Q7 H1 b% k* @" M _}7 \' W3 ~+ P1 ]# @: }6 v, T2 V
& [4 n+ C9 m/ P2 p: {module_init(led_platform_init);6 z) g& Y& Y& _1 i$ p/ A
module_exit(led_platform_exit);
. c+ s; Y4 I' |$ B. h% m C8 z# N: j4 B: B) D; V
MODULE_DESCRIPTION("Led platform driver");; M' ]7 y0 A$ k
MODULE_AUTHOR("Tronlong");
8 q% e3 s3 u+ t, j/ BMODULE_LICENSE("GPL");
5 T' [2 J7 _8 g8 D: {+ G9 X
7 B" S2 r) k9 J8 Y# _% F |
|