|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ s2 J; B# t# X6 \. Q% ]# ?
#include <linux/init.h>% W( c! p' [. U0 v' r
#include <linux/module.h>: q! p7 i) @2 o% o# U
#include <linux/kernel.h>( q% q/ ~9 d/ t9 i
#include <linux/types.h>" R" j' ?0 g* x* Y X+ N4 _
#include <linux/gpio.h>% f% ^" A1 w: T/ Y* }
#include <linux/leds.h>. J. C& C8 [& D3 E8 ^, S3 p. ~
#include <linux/platform_device.h>+ w$ F- p% O* _9 E1 r: C
' \. f- M+ k+ ^" ]5 G#include <asm/mach-types.h>
- h2 ?/ b" `, ~* Z, a# S1 w#include <asm/mach/arch.h>
& u1 W; i* R% M- J% G2 s7 [#include <mach/da8xx.h>+ N+ E7 c) B! @6 z2 W% o
#include <mach/mux.h>
- Q3 e @) v5 m4 W: I
; u& W7 [! f6 ?/ W#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 ~. N& `9 f5 E J+ N& n% p
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- D# ?* o+ s/ d: b#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 N/ t; t3 |% c' P& a3 K; O#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), o! X" Z% ?+ F4 ?
" u1 i9 z# ^4 `) ?+ Y# S/* assign the tl som board LED-GPIOs*/- _6 ]* `- t; W3 w
static const short da850_evm_tl_user_led_pins[] = {
5 f# v: I6 g5 ]+ i$ k7 h2 p /* These pins are definition at <mach/mux.h> file */- B4 v4 M! N( L g' e
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 _, S8 M6 Z$ B# S! C -1% i( v8 F1 f$ p! s
};2 }: k1 I0 c+ M; N' J( Q
# j r4 Q) e3 R0 `% E1 ?
static struct gpio_led da850_evm_tl_leds[] = {0 y6 m1 S; H6 ]2 W( `
{" [4 K5 H7 P. y
.active_low = 0,
. J) N' y1 j; Z7 _ .gpio = DA850_USER_LED0,
( |8 x( G" C$ u .name = "user_led0",/ e# {' L; y* d& d9 ]0 e
.default_trigger = "default-on",
C3 t; f! g ^. B' ?$ i },
. R% N [* i6 u$ m/ _ {/ z3 k- }5 L" E. t. I
.active_low = 0,; A, b- Z, G) o" p V' _1 K5 w# ?& m8 g# m
.gpio = DA850_USER_LED1,; L" T: C3 E; ?2 v& H; c# _
.name = "user_led1",
' _0 ?" ^; V i& R5 Q ]0 A" D! U .default_trigger = "default-on",& \) w8 N" m) H6 q
},
9 n$ U% g+ [7 A% m* N; g1 j {
3 o8 A' K& [5 H$ l .active_low = 0,
. C. i' M4 Y' X7 Q- X% m .gpio = DA850_USER_LED2,
; d. D( R+ t4 L$ w4 ]6 L# V .name = "user_led2",1 b9 j$ V! x0 a
.default_trigger = "default-on",
$ y# ]4 F- Y6 C) Q },
& q1 T% e5 Q3 b! w; w9 b" E4 I' A {
( B: c0 O: T+ d5 i9 | .active_low = 0,& q7 @- Z @) n9 d2 Q- j
.gpio = DA850_USER_LED3,6 j) C5 G, r0 z5 G0 |& ~
.name = "user_led3",
( ~2 U2 O7 s' y i, j6 O" { .default_trigger = "default-on",6 J2 I9 |$ A- t9 P' y. b2 U
},
6 f- ?- g+ A" {( I, b( ~9 z};( _7 M& b. A; x! k% y7 v6 _. @1 L
9 O+ f. D7 h( C8 ^( bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 a4 K; m* Y/ ~' j- c: y2 ] .leds = da850_evm_tl_leds,
% M$ B6 l9 N/ w+ n1 y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( b) g$ z6 e2 W9 ^- u};, S5 K$ D1 m4 y. O# [; C7 R
1 b0 ~* @8 H$ \1 [2 R6 f
static void led_dev_release(struct device *dev)
& }$ c( O* k' b, E3 s{; t4 e4 z% I, y' C; m5 z Q# ]; }' V
};
, k4 K6 ~& H0 o- J6 Z3 L; |$ t/ B" t# F& O8 B) u
static struct platform_device da850_evm_tl_leds_device = {
# h! R" D6 P! B! E .name = "leds-gpio",3 `1 d5 C4 m r N+ \
.id = 1,
7 q0 R4 X; W, k( G2 {% ?; ~ .dev = {
( N9 l# ^, H4 n7 c; v2 M .platform_data = &da850_evm_tl_leds_pdata,1 U0 f9 o4 Y8 A
.release = led_dev_release,. p0 d( h3 Z# O0 B" z" j& R
}2 \+ W$ y' \& _/ x
};9 \2 h. l& p7 G
: U+ F' o" a# A( ystatic int __init led_platform_init(void); K- N$ H4 n" e! K$ E8 q2 I+ }
{
: Z0 q6 i8 w- _$ M8 U int ret;
. [6 L* T+ k( `4 }4 L#if 0+ F+ b- U$ h! e
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
4 d. g& Y- M0 O: l- Q0 t0 f' n1 w9 V if (ret)
( `; B' r& \1 @1 A& d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& o! ^0 E) K7 Y" H. j2 [1 B
"%d\n", ret);* g$ D% h( O2 _ }1 M) u$ a! f
#endif6 y4 ^8 B: {9 M1 X* b% O
ret = platform_device_register(&da850_evm_tl_leds_device);! z, t+ D: {- N% C
if (ret)% [; c2 W% [& q$ i& a4 }$ `
pr_warning("Could not register som GPIO expander LEDS");
2 L+ a! t3 t( |2 u else9 E" u6 ^! A# h4 x+ U, o6 I- U
printk(KERN_INFO "LED register sucessful!\n");
0 ]8 W8 p3 O* F( u7 p2 D$ U0 i; }! |, A! J4 k" O
return ret;! Z, O+ G0 T1 ?8 C; Q6 X
}# w# ^$ V9 T# w" k; N
. J; r1 t: w' r& ustatic void __exit led_platform_exit(void)8 m" {# Z1 ^+ r9 k; b
{2 j# z/ C p: ]6 G% I+ m
platform_device_unregister(&da850_evm_tl_leds_device);
+ X$ A1 d9 |6 d. J. B# W% J% l4 \1 Q+ n j* P$ ^
printk(KERN_INFO "LED unregister!\n");
+ z( T# n5 k z0 h6 d}/ g- D2 M; K2 ] ~& ?# p" T( h
# t# ?; ?% o R8 |module_init(led_platform_init);
2 q; I, r3 r0 x/ Lmodule_exit(led_platform_exit);/ P% t9 ?; N1 A1 e* c; T% I
" J; m& A N, S% fMODULE_DESCRIPTION("Led platform driver");0 e8 c2 ^/ |+ F3 \, F$ f" Z$ U
MODULE_AUTHOR("Tronlong");
" f7 L- ~# f$ T) B" \MODULE_LICENSE("GPL");2 }+ l. o) b E7 G6 b$ Q
: d1 n# w; K1 F |
|