|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
% L( D7 f& J a ~) ~: `+ z3 ]#include <linux/init.h>
; f2 e, \8 o% X: W2 X#include <linux/module.h># m* u* I" a: j# {
#include <linux/kernel.h>
: v$ E- d! W2 }#include <linux/types.h>
. t, { ]. W: i+ O& @& U#include <linux/gpio.h>2 p! h$ R4 O% U! a" k7 W: l
#include <linux/leds.h>
# k' k! o$ L7 B: b; Y8 ]#include <linux/platform_device.h>
7 f# ] D% t+ c* J1 T0 f3 h, \' L, O P7 J& e' r/ V! `
#include <asm/mach-types.h>4 `1 }! ^% m8 x4 E5 F5 {/ R4 j. V \
#include <asm/mach/arch.h>% p2 A" ^. @- g0 w+ g
#include <mach/da8xx.h>
( z$ |- O& ?4 m {& W: o1 {, s. Q#include <mach/mux.h>
! q2 ~. }. V/ Z; H9 V; o
$ v8 `) Z5 \% d#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ C6 U' E T' L* S+ a/ p) h
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 _7 E+ a, w" ?& S. U" g#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* t( A; T6 O, J! b* {4 `/ j5 o
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), ?: q" c4 u$ g' ` T
/ q& x2 l G8 T0 _) h% l4 W
/* assign the tl som board LED-GPIOs*/' M4 P6 _6 G3 b& R: ^: o7 L* D
static const short da850_evm_tl_user_led_pins[] = {
3 Z h) _; a, o( G& r /* These pins are definition at <mach/mux.h> file */; g' Y2 Q1 s- R% U' o r+ I9 M
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 d2 |' Q2 d+ p" Y
-1
6 C- m: T/ p$ }0 ^6 z1 a};
" q6 [/ [% z6 t
; L6 {& ?0 z! @1 H$ }static struct gpio_led da850_evm_tl_leds[] = {
/ m& @( t1 H5 s3 E! o. m: @+ z1 p {- @6 _9 u6 \/ B; n `, t
.active_low = 0,
, j# l b' T1 E' T5 H .gpio = DA850_USER_LED0,5 Y- w6 A( K- ?# P' n/ p; z! y
.name = "user_led0",- T; Q4 R0 {" F
.default_trigger = "default-on",
, X' T7 t! \! m: l( j7 q U },
/ n. w1 t1 E5 W X% _ { _# f- i/ L+ M0 W
.active_low = 0,
) t3 e, K9 G4 ~) _; ^, Q .gpio = DA850_USER_LED1,
! y: }; b" k$ j" z/ g% u .name = "user_led1",
+ G9 q( ?5 U% r3 h0 d .default_trigger = "default-on",
: O0 b \$ ^& t8 z# D },, s x2 [1 }" K- n2 w! u
{ R3 g, I% Q/ S. b6 \! p1 J, v {
.active_low = 0,
8 s( y" ]* b* G .gpio = DA850_USER_LED2,6 B7 @5 J- K6 _! P
.name = "user_led2", L3 ~; | `" \) C
.default_trigger = "default-on",) A5 U# A, y2 ~5 n
},
, E+ i$ i$ z9 J" m {
6 p( T6 _1 j% G/ r7 M .active_low = 0,
& S2 i! e1 x1 e! D .gpio = DA850_USER_LED3,) c7 V7 A- O% M- s
.name = "user_led3",
( u9 X% `4 A3 m .default_trigger = "default-on",2 @7 {9 O' O2 `0 z3 P) t: C/ C
},0 [& Q6 y# w" G, N1 n) E
};( R: Q! Z6 T: B2 O
7 Y5 Y- H0 a0 r3 W
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 p9 p0 w7 c7 v7 ?" d) H7 p9 D
.leds = da850_evm_tl_leds,/ |- }! P6 S( L4 [) y7 d0 W
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),. S! Y* _! U" |+ |
};: T G9 c& T) p9 e
L4 | l% d0 G' \* ?0 l# i
static void led_dev_release(struct device *dev)
' L9 M; W4 U4 q! t8 o{
+ o5 z: L, B) Y w) ^};
" {/ U8 d' p* ]% |$ h& A& F) l8 O; A( u5 d
static struct platform_device da850_evm_tl_leds_device = { E3 d1 i- R- F% r Q {0 E$ a
.name = "leds-gpio",
- {$ `8 b: z7 t! i5 f) F* A% F! Z .id = 1,2 ~9 D8 _% K1 D( H4 H! a
.dev = {
8 x; ]. h) e$ H5 L .platform_data = &da850_evm_tl_leds_pdata,
; B3 w/ v# K1 z4 @- b' g. |* t .release = led_dev_release,
) q" |5 H. x5 f6 K }
! Z! y- F8 J3 B* v7 r};/ S" x5 s( g5 S9 K
& c7 J5 i0 e$ zstatic int __init led_platform_init(void)+ X8 r& F1 E! p }: T0 q
{# C" m' ~2 m) {6 q( c
int ret;
7 N, v# P" @. K; W& s }#if 0
G7 V4 [' o9 x( q+ T! O ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. t( g- M; Y4 h- r r; R. _% @
if (ret)& S% e5 W; X, {; E( O' R
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 i0 @$ `+ ]* p
"%d\n", ret);# D# S) T) f* q+ T0 a j
#endif* B2 o5 p5 O1 U
ret = platform_device_register(&da850_evm_tl_leds_device);0 W* s/ r( n1 B. ~8 _4 u
if (ret). T* y+ r, u, I9 @0 {8 V
pr_warning("Could not register som GPIO expander LEDS");/ I- N# o& V4 Y' I! p/ b% r
else) }( G" {9 e& d* l, i$ H
printk(KERN_INFO "LED register sucessful!\n");8 C8 f! C3 O' U8 C
0 s) i7 S0 T% ?$ [, @* _/ r return ret;. }& B3 X% v: e% X1 f
}6 D7 `' T1 E$ z: q! @% }9 ~
- x% x& s6 m/ w
static void __exit led_platform_exit(void)
% M) f3 d5 ^ Z0 [- x, a: W/ Y! e{- t/ ^8 i3 X0 s h. T2 X$ U
platform_device_unregister(&da850_evm_tl_leds_device);
% q) K2 {) v9 [0 X; n& w
& t X9 I) v0 J0 \ printk(KERN_INFO "LED unregister!\n");( x! L- s. ]( m3 V3 z! B
}8 T4 [' |2 K" F5 r+ d0 F
& M% l; }: B$ t( E3 ^. e6 T% x' Jmodule_init(led_platform_init);
+ a. b; `- r9 a9 v2 t/ d; }- Imodule_exit(led_platform_exit);* [; G7 j/ W# n2 g L6 h
- d- p7 h" K w( A* }/ U! q A* p
MODULE_DESCRIPTION("Led platform driver");, J& w4 w \5 R# A+ _ ~
MODULE_AUTHOR("Tronlong");- a1 z* g! B% `% R6 x+ B
MODULE_LICENSE("GPL");
' i6 `" `0 c' h5 }+ E+ |! y% h# d* K3 p/ i
|
|