|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* r _6 m' ], v. g2 E- d#include <linux/init.h> u& h' R6 G# q# i/ F. _
#include <linux/module.h>
) e! }. ?( m" X4 h5 [#include <linux/kernel.h> Q a5 V9 Z# @% U
#include <linux/types.h>+ R5 t- W% j1 x( ~$ O ^
#include <linux/gpio.h>$ ^) y1 I3 |5 y; L% v! g2 o# t
#include <linux/leds.h>
- N" ]( w! h' u& q+ Y+ Z#include <linux/platform_device.h>
! k# Q& ]. I% i3 i3 W$ j' o7 H! {/ x( q$ x
#include <asm/mach-types.h>
" z; m. r1 [ Q1 e& L#include <asm/mach/arch.h>
9 x4 X' V G% Z! h# e7 A5 Q' x#include <mach/da8xx.h>; a4 T* ?" |" L+ F, K; u
#include <mach/mux.h>
; M: D. x2 |, r: t0 v
4 k3 t2 P9 p0 B8 s# s8 O7 F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' J/ o, T- ]0 d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 H% x* f2 E% Y7 L! o
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; K) ~0 j. ?( G: A7 @5 r#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
\! g9 N# ? P/ g' w- j1 _+ g
! |% i0 M: k% g# j g" r( o/* assign the tl som board LED-GPIOs*/& f1 f+ i8 y; [" F& u% Z3 @) T2 S
static const short da850_evm_tl_user_led_pins[] = {
8 P6 Y# O; c1 W5 ?5 g# W /* These pins are definition at <mach/mux.h> file */. G# n6 \" Y% k! u
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! ^+ \* W3 Y; _* q C' |9 S* e
-1
% ]; O: R' l, e};# D# z) Z [0 S, ]% ]& G* X
0 w. L [- P* {static struct gpio_led da850_evm_tl_leds[] = {
5 h: {, h% v1 ^( @" e. i {% l0 H, i, c$ U2 I3 i5 E
.active_low = 0,
4 X+ V- y. `# I+ N& I7 e .gpio = DA850_USER_LED0,$ m% q. }: y( l; n& v
.name = "user_led0",
) o' ]9 D: U% q3 {" H$ Q .default_trigger = "default-on",
1 P. o$ [; Q. z' F1 ^, ^ },, s# m) s1 U% u" N! ^" @3 y: Z U1 H* c
{: k7 m: Q: s# _ F$ p, d
.active_low = 0,
' o8 j0 Q% r) O# { .gpio = DA850_USER_LED1,
6 n- ]7 K: k1 L9 _- t% e' @+ c .name = "user_led1",
0 E7 O4 }% `0 r) r, \3 u1 r .default_trigger = "default-on",- t- d% L) g( e
},
3 e) {# F$ p: f1 k, ~ {, @3 v+ x6 j6 w, M. `
.active_low = 0,; j. r2 ^3 C$ _) o, y1 T
.gpio = DA850_USER_LED2,5 z' l# t" J, n; k5 E& v
.name = "user_led2",
' P3 i! q# |( r# z4 P' Q% L .default_trigger = "default-on",9 X3 B% P* j! l, {- H# S
},) r# Y* z8 M. f$ `) w
{ w3 s- Z7 b7 X" Q* R# k
.active_low = 0,, O2 t1 v( q/ i0 \" g& N" h
.gpio = DA850_USER_LED3,
/ s/ u: V3 ^: s: [/ _' F7 D$ y! h2 v .name = "user_led3",
6 ~6 \# V; y% ? .default_trigger = "default-on",5 ]' R$ L1 n( _
},
0 |3 A0 T: C- t% Z" d G/ q};
6 ?2 ]" |6 q K- T1 E
: G8 E. N# `+ z3 \+ Istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) y0 [- c5 ]2 N( a/ g( [7 A .leds = da850_evm_tl_leds,
; z: T( G% Q1 W; W% y8 \6 @ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 R& h# o. P/ q$ ^};
( q& l8 R* k& V1 n) u7 k1 c" j; q" K7 w& f
static void led_dev_release(struct device *dev)
. D0 v/ \/ {* R! b{
* f) j& Q7 @7 l$ k' q3 C1 T, b};
2 F% z. _ s0 K) ?" y* a- P% r& q4 q7 ^6 |1 R0 `, l7 \* O. T
static struct platform_device da850_evm_tl_leds_device = {, n, T" m& d" H3 H, g
.name = "leds-gpio",) y! Q( [/ S- M" q7 ^* x
.id = 1,
# Z( R2 Z3 Y8 r3 y .dev = {8 r* t% _' I' Z0 ]
.platform_data = &da850_evm_tl_leds_pdata,- F4 a& l+ e/ {1 t. v- Q+ s
.release = led_dev_release,
; k9 k$ }+ L: z; M' k' E5 y* e }. c2 X' \% @) U& p7 o
};
3 _5 S" k! ]1 r/ M- n6 S; M) @# r4 y, i' H9 m L8 @
static int __init led_platform_init(void)
' U9 m. x: n* n, M- w ] ?{
/ W0 g& }: E I3 [ int ret;5 W5 W" M0 I K# ?% ?
#if 0& G% [ x! q4 `* Y2 D( z( F
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 `2 s6 k5 c Z0 l/ k( q
if (ret). B% j1 q' q) e+ S5 |
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 _" j' W _: u( c
"%d\n", ret);
, c# {6 G6 k: O#endif
9 q. ?- | N$ {: g, l" x ret = platform_device_register(&da850_evm_tl_leds_device);
7 c, u6 A U Q" L if (ret)
, {/ v' v) u3 R( w s3 B pr_warning("Could not register som GPIO expander LEDS");, u! x# D! O) n& w7 S" k4 E
else8 s- p3 L8 u* N5 O/ X! `1 X
printk(KERN_INFO "LED register sucessful!\n");
* S/ |: ?. a- ` G7 z7 J% h3 ~
. j8 b! I: f I% Z8 y return ret;
7 o1 V% {1 |( a' b- X# f}2 l3 l/ u2 ?; d X; [
6 d' Z6 G1 f0 U1 g( X" |
static void __exit led_platform_exit(void)( y1 Z4 ~: N5 V0 @! m
{6 K3 R Y' o& k! _. [* f6 g# r
platform_device_unregister(&da850_evm_tl_leds_device);
! {& i- I& Q1 p- o4 |- U$ ]. R* A7 e' V2 f3 X8 e( l, t3 M
printk(KERN_INFO "LED unregister!\n");7 ?; c8 R& C) q7 f8 z
}
V3 J3 k4 |$ u
5 ~2 Q( a) B( _! X: xmodule_init(led_platform_init);
2 O0 \$ d' |- l9 I3 a+ e6 W& \module_exit(led_platform_exit);
3 d7 Y" R7 b' U: v+ }+ h' j5 ?4 K
2 y; h( m/ C' w, y& RMODULE_DESCRIPTION("Led platform driver");
9 Z; W( [, q ?. PMODULE_AUTHOR("Tronlong");
9 t. K& _1 J6 E8 |9 gMODULE_LICENSE("GPL");
* e8 P& y6 b2 F! ^/ ]) V* ?3 q+ w5 `' {: O2 L2 J8 ~) ~0 H* x1 A7 G; I
|
|