|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 {, g5 O \) v& N8 w#include <linux/init.h>8 K1 q' T. }, ?5 [9 K& S5 l) ^
#include <linux/module.h>
2 ^1 s7 E' [4 `$ F#include <linux/kernel.h> x& C( i$ [ G6 P: n: O k
#include <linux/types.h>
& }, J; t# J( Z( z w#include <linux/gpio.h>* I( o. G- e5 {
#include <linux/leds.h>6 ^9 g4 c+ i9 C1 c4 U) R
#include <linux/platform_device.h>
9 z. W+ {4 T; N+ Q+ {* }6 q1 q# I! m
#include <asm/mach-types.h>2 }0 e4 k& S e( d* t0 Z
#include <asm/mach/arch.h>7 t2 z" q9 H5 L3 w$ p$ O2 v& `
#include <mach/da8xx.h>
7 V: y; t" h* \$ \4 D( g: D#include <mach/mux.h>, j7 s1 w$ Q* Z4 p& @
0 _% a' o I4 y: Z4 C+ v#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 w3 [3 x N8 r- ~. O' C#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 h6 l; z. I, p5 F9 q: f0 _, O. s3 o#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 J5 n2 O. G! B% g8 h/ z#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 V2 T3 R8 W' C; M& `6 T& t# [# `- |3 o
5 R3 u5 i2 u6 R- B3 z T* B; ]/* assign the tl som board LED-GPIOs*/
# B. s" J0 F& O: r" L# p$ e+ Ystatic const short da850_evm_tl_user_led_pins[] = {
6 s6 R1 v5 [1 p$ H( ^ /* These pins are definition at <mach/mux.h> file */
2 i6 L1 ]% b) G" ?( t* ~ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 _1 _5 f- j7 e6 |5 `& { -1
# s' C, @3 p* ^* u. c};0 x" k$ |$ Y' @% B- f) o! ?
4 Q# `( F0 g& ~1 t, astatic struct gpio_led da850_evm_tl_leds[] = {
+ H+ ^2 q' {+ m0 } {$ M, v+ U& ?; T1 m# O
.active_low = 0,
2 i/ j/ p7 j! i/ H. P/ r .gpio = DA850_USER_LED0,
0 ? n. y" J. y+ `& v0 E! \ .name = "user_led0",
9 _$ A4 F/ ^, J .default_trigger = "default-on",
& r$ x3 P) Y8 f7 m. v },
. X5 H9 A/ N- }0 o {; X4 F" S- s" S7 L- M% L$ d4 q
.active_low = 0,
" d' N7 [7 W. t0 P+ w: f( W .gpio = DA850_USER_LED1,
) z9 n8 g0 D, J3 l3 J6 { .name = "user_led1",
2 d1 \# e# E1 ^ e) W+ g5 E* L .default_trigger = "default-on",! F+ n- s+ b; ]! d: f2 ^0 N) x
},
& a# K1 f0 K$ [( h {
; g: `2 Q# j! Y .active_low = 0,
5 q" o" @! s+ U .gpio = DA850_USER_LED2,
( y4 c K2 p- o- v R7 R+ N' J .name = "user_led2",1 m' I S3 l3 A/ X! v, j) b: X
.default_trigger = "default-on",3 `7 ]; X+ Z# `6 T5 \( A) R
},
' R6 ?3 j: F; m! ]0 | C5 N$ l {
8 H7 x* J) g" i& i .active_low = 0,
2 V8 ^4 G2 c* ] .gpio = DA850_USER_LED3,
/ u S& u* A! B' d! } .name = "user_led3",4 }$ Q. i3 M" f
.default_trigger = "default-on",
; @" j9 L" v! x2 z! I },0 G/ R5 F K/ C x# j
};
2 O$ {- x) b0 I* Z5 R( Q
1 j2 X1 f" P, V/ J5 b/ Wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 k. c+ o8 x! T1 R .leds = da850_evm_tl_leds,: t+ v# x2 r7 ]6 `7 J' t3 c
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 S$ B* G+ {6 `$ _7 T
};/ F' b" P3 I% S0 B' ]$ w
) k9 m" A! K4 G G e b' z
static void led_dev_release(struct device *dev)
5 _$ F P4 b0 u- F# C9 r% G. Q2 W( O: l) l{
; G; a/ e) }; u% g: y};
\6 l. S! S I7 o3 v" D% N8 [% C3 k* B) J
static struct platform_device da850_evm_tl_leds_device = {# p$ s8 o/ W- {8 e0 R! T
.name = "leds-gpio",# E- M! H, D; k( g: m- A8 j- D3 I
.id = 1,
; o, i3 \, ?3 R) F+ [( a$ r .dev = {
' L* W9 m$ n/ O5 I( g .platform_data = &da850_evm_tl_leds_pdata,
+ e, v/ u! u4 }) D/ } .release = led_dev_release,2 w7 U% d# ?) h4 s4 C: R! ~, x
}
( d% \) w, h/ e& ?# P5 c( Z8 t};# V: Y$ U. d, \' A- q% {
3 m3 n* j( D6 M8 w
static int __init led_platform_init(void)
$ O3 F, v4 q5 K; C& U: l{
$ u9 S4 Q a+ a \ int ret;
' `/ N1 Z8 @# o, N* I" |: ~# p#if 0
: ~) K; b8 K3 ?( N8 |7 I. b ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, `, X2 G0 |2 P8 l
if (ret)! }. W( b: z. }1 K
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% J$ [( r- X- J# c7 f% c2 W& S, h; V "%d\n", ret);
6 d5 T; N5 Y$ f* S#endif
/ {+ I7 I# k- `& x( n7 ] ret = platform_device_register(&da850_evm_tl_leds_device);0 Q: f& H7 z' J( i8 o
if (ret)
) f" G( C0 t0 N4 E' M7 M1 ? pr_warning("Could not register som GPIO expander LEDS");' D6 Z( V" x4 m* B2 k* c
else
' ~& s; a. A4 t1 ` printk(KERN_INFO "LED register sucessful!\n");
4 A! s! t% T$ r3 A5 E! X- q+ ^( e5 u& G* U5 y! M% u+ l
return ret;/ H# `5 B A( C% ]; }8 q# N3 k2 c
} |4 {' S ~' D1 g, Q
2 u/ r2 [: e$ U: G3 o0 D/ n6 y
static void __exit led_platform_exit(void)+ A R, w B S9 h3 F( Q* P
{! ]. W1 g: b4 l/ C7 Y4 j
platform_device_unregister(&da850_evm_tl_leds_device);' K( z( ?, x( _6 d' z& u% M
% ^& j/ Z( v1 K! m9 b4 c printk(KERN_INFO "LED unregister!\n");
3 u' P+ P1 C. ^' f% y% ^}
% ^; J$ h6 |0 q" I3 ~ q: |3 A% P" j( o* K1 {* \3 r' T& J
module_init(led_platform_init);
y6 C% U2 }5 q# E+ N" R3 a9 a; qmodule_exit(led_platform_exit);
$ Z ^; _8 g" R1 D. }# r6 r+ \3 z, f: ^; D
MODULE_DESCRIPTION("Led platform driver");1 e' ^/ [0 D: J; ]' }0 \3 K' F
MODULE_AUTHOR("Tronlong");+ G n/ a7 v0 |' _1 D
MODULE_LICENSE("GPL");0 E: }! D$ s' \" W+ |& b
1 K+ L: B: K* M* O |
|