|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' {: J& I, D" T7 P" B, G! F- \
#include <linux/init.h>
^) L! B) d @#include <linux/module.h>9 U9 L, }% f! I
#include <linux/kernel.h>
8 e* v8 W, j: c5 e# V#include <linux/types.h>% H& |- F, g7 \! r6 \$ e& d
#include <linux/gpio.h>
2 o7 v( M% L, W! q#include <linux/leds.h>; [2 i, M7 U. y& q& j% s3 l3 s: f
#include <linux/platform_device.h>
- ?; N$ _+ y8 E, S7 R2 ^
4 D, ^$ N6 v9 U" T6 Q1 L7 j#include <asm/mach-types.h>0 a8 a0 m( Q' }* ~
#include <asm/mach/arch.h>
: j+ n; g; d g9 Q#include <mach/da8xx.h>7 V& V! L" @9 J' s% D7 b
#include <mach/mux.h>
0 o+ U, j& |2 _6 t, P9 z' R5 ]! ^! C0 C5 [
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 f8 B5 @# n" n/ T
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% Q4 j9 y ~) ~0 r7 A2 a! y# Q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! R/ z$ Z" C) w/ z/ \4 S' q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ G$ _, ^6 Z8 D: o9 c
1 |, V6 {- o. t1 t2 z$ C
/* assign the tl som board LED-GPIOs*/- W3 d3 c; q! @8 j" q5 ?7 F
static const short da850_evm_tl_user_led_pins[] = {
. Y2 O, t4 k+ X. n$ m8 I7 Q$ Q /* These pins are definition at <mach/mux.h> file */# x$ V' `8 {. R% p- u0 o( x; B
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 O3 A3 ^1 _4 c# M4 ?( a8 u
-1
" f: I6 p+ g$ L3 f) Z$ R};
/ G% r- w3 V$ K, g/ p, i7 z, N- H& [ H z
static struct gpio_led da850_evm_tl_leds[] = {7 W' W( S2 b5 @, ?8 J( D
{
8 x3 B! t$ ~( D6 _$ e9 [: G .active_low = 0,) k* d8 Q2 O0 V% G7 c8 s+ z8 s
.gpio = DA850_USER_LED0,
, h' C: N i5 F# d: h$ L Q0 n; \' t .name = "user_led0",
! C* ? |0 {+ n& G3 c5 r" j .default_trigger = "default-on",$ p" `+ B% f9 _
},1 f& g5 ~. u" t$ C+ B; z& S
{' q4 J q" [, \) E
.active_low = 0,; U8 j5 v/ m" p8 g: I6 X3 h+ `( J
.gpio = DA850_USER_LED1,, U( Z# N1 n7 ]6 q! f
.name = "user_led1",
' R& l2 Q. h6 O/ j* @3 y .default_trigger = "default-on",
9 K" r, [, _* p/ Y },; [& I+ i- s; K, q
{* u1 T$ F' i3 K' J3 C4 O, l
.active_low = 0,( C& b7 l: Y* E6 a1 F2 V
.gpio = DA850_USER_LED2,
. ]2 i2 x) l6 C; M .name = "user_led2",, c. q, n$ i& r2 z; W f
.default_trigger = "default-on",* w2 H! ^5 Z6 s/ f" C9 ]
},) _) n) v) E( C- v' Z! r x
{
" k- R/ t5 H# n3 Q% G( w .active_low = 0,0 d; n# ~6 P/ N% j6 c2 f
.gpio = DA850_USER_LED3,, [6 e: V1 B, W C$ d; Y* Q9 T
.name = "user_led3",
' t2 y; z" n( m- t | .default_trigger = "default-on",% P( k' N7 p4 D9 f S: m5 F
},
4 ?! {! G6 R: E+ M5 R2 P8 r, G' P% k};$ M7 Z3 d6 d' e }
& a. a: b, @. b& x4 Y. u/ c7 h1 Lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% T- P! k9 z; i( R U5 o
.leds = da850_evm_tl_leds,
0 f: J y' k& _, n3 F2 N" v .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, r) V1 Q4 h- z9 @1 g};
! i+ K- @) S, T
v3 V9 F V. z* c5 g, _static void led_dev_release(struct device *dev)
1 Q. ?4 e4 f, |{
" g0 T& I& R/ Y/ w};2 \8 l' h R* q0 K9 O3 S5 x# t
" D% ~# `! b$ B- l' l
static struct platform_device da850_evm_tl_leds_device = {
6 h3 K4 z1 A# I: i) C" o, E9 B, n# a .name = "leds-gpio",
) r. F% f9 k9 ~ ], R .id = 1,. M1 C) g6 k- m+ V4 H, H
.dev = {% w. L% c% T Z4 J
.platform_data = &da850_evm_tl_leds_pdata,
* R& f& i7 T2 U! P1 H .release = led_dev_release,
8 K9 y2 @6 I4 ]$ L; | }
2 Y# |- X5 h( T- a' Z8 o5 T2 Z};
9 b' X& P: E! a4 a; K
& ^! t" j# G* W' ^static int __init led_platform_init(void)7 t$ R8 D+ P3 s: ^
{
& O+ c B# R! | { int ret;# a, Y1 R3 y$ h! x0 Z; g
#if 0
- z3 N. W8 ]/ H2 c# I& S& m ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 d1 t8 W* C/ E2 w. R( k, C* B; {
if (ret)/ b! J' l2 ~- J- z' n2 d
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ @) i+ P% O; u+ a h( F
"%d\n", ret);* V0 l4 I- M9 C" A6 C0 t
#endif. ^% x+ |6 Z7 t- ^9 m
ret = platform_device_register(&da850_evm_tl_leds_device);! x& p8 h3 o+ T3 C
if (ret)- @: h. c/ y* M
pr_warning("Could not register som GPIO expander LEDS");* x0 N- R' p0 C5 \$ K: |( i
else
* {3 F' i1 h- V$ @5 _# Y printk(KERN_INFO "LED register sucessful!\n");/ F: @2 {/ v) s2 R6 z
* k1 h. V2 D" V; Z' b return ret;
) V. l5 G* N+ J/ v' r} e! b7 w7 }7 n1 l5 W
' B2 ]7 h1 W( T/ q6 W2 S+ k K: t
static void __exit led_platform_exit(void)
7 [: \1 W7 n1 _% ?{
; {, @# M! I& ^- N# N8 e platform_device_unregister(&da850_evm_tl_leds_device);. `, q9 v( ]5 s; s
$ }4 H/ P/ p7 U9 R( K# j- k
printk(KERN_INFO "LED unregister!\n");9 O2 |/ S- Z/ w. e9 f6 \" ?
}
( v% H3 j' |8 O: f* `# R h5 Y" |" O! f* p) Y5 Z1 _
module_init(led_platform_init);2 x/ P* W/ [7 M6 i+ t. [+ O/ z
module_exit(led_platform_exit);% ^! _* G* E0 o T
, o% C7 Y# @; @) M, L
MODULE_DESCRIPTION("Led platform driver");
4 o. b6 U' |4 |! |- B* Q* \7 m o8 tMODULE_AUTHOR("Tronlong");% X7 y3 I0 H0 h! p `
MODULE_LICENSE("GPL");( W2 z5 l& |6 m) y1 H/ B [$ p
1 _3 j7 x+ n1 i' h% J9 m |
|