|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, \, i: C- x7 _4 ^3 `/ m- X7 F#include <linux/init.h>+ o, j% [- F6 M% S% Y( ?
#include <linux/module.h>
$ I+ e& f# C# j9 h" S#include <linux/kernel.h>/ S* |9 p0 x0 U& ~+ T3 f- e
#include <linux/types.h>
- l& ~: g" ~9 F" G! M3 Q#include <linux/gpio.h>
0 S6 P( j' e' y" u T6 w) e#include <linux/leds.h>
+ }8 h' e s9 L) F#include <linux/platform_device.h>
N3 C v7 p) v9 [! V& f
@" n5 d! K/ D( n/ A#include <asm/mach-types.h>
5 {! A( l2 X* d" p% y% Q#include <asm/mach/arch.h>
2 s Y& d w- u' m' {#include <mach/da8xx.h>
; t& R+ R) z* b1 r#include <mach/mux.h>
/ d9 {1 a& Z$ k& j* D& l* z0 P t5 J9 u* J9 D
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
3 y8 Y$ K, q, U. H' i#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 g( z# {% g/ U
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 S* v k: R3 p% R: X4 [
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( A9 ~* c+ t5 L1 p; Z% P
4 A! _6 K8 D3 G; [/* assign the tl som board LED-GPIOs*/. U R3 C# b1 B! h2 c
static const short da850_evm_tl_user_led_pins[] = {% U( T' X, w$ Z: X# {$ ~* d+ s1 y
/* These pins are definition at <mach/mux.h> file */
, K* u5 t. B: |' r2 j6 w# M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 M3 j1 P) m# n; Y3 n5 Z
-1
$ [: e/ S+ u2 j* m# C2 I, D( e};" q3 ?' E* }+ O# |7 i1 o9 r
# D$ }2 @! z4 b% ?
static struct gpio_led da850_evm_tl_leds[] = {/ J) ^9 V6 H5 j2 X- p P- U5 N
{
x* c6 y* `/ Y$ `/ j+ ` .active_low = 0,. }8 H6 c' P% E2 o6 q
.gpio = DA850_USER_LED0,- o W) B% I) c; Z& Y! o
.name = "user_led0",
$ ~$ S2 s/ p; |. L .default_trigger = "default-on",
8 v9 ] j6 i) |0 E, v, C% t1 M },
7 _! \2 q% p3 n7 c8 r {
8 N1 ~0 O0 c& J8 t( R9 Q' t .active_low = 0,) r# r% O* B0 s5 ^4 R
.gpio = DA850_USER_LED1,# d1 ]( G, V0 w! Z* O( }$ B
.name = "user_led1",6 d$ `9 v3 n% b- c7 U0 W
.default_trigger = "default-on",1 }( \% J% Z8 X- K
},
' G, r2 Y1 b4 a; X5 C, X& }( ~ {# g( d$ U1 w! {: ^
.active_low = 0,
. `( I1 p6 D7 w. T .gpio = DA850_USER_LED2,9 Z0 ^1 e- q$ B' g. j, l. r
.name = "user_led2",: g6 D7 H: O3 V4 S# f6 N( C' m
.default_trigger = "default-on",7 V* L- _; ~, X& _. D4 H; e+ | g2 }
},
" B% W9 t6 T' }8 I# T: g {' z0 C4 A4 {- W6 \( v3 P
.active_low = 0,
' ?: g- u7 P2 P4 @ .gpio = DA850_USER_LED3,4 J. G7 |( J4 y i2 ^6 _( \
.name = "user_led3",1 a% d' H) }) t; Y1 }
.default_trigger = "default-on",
- [% j3 p6 C5 |- ]" b7 c },
3 H8 i7 Z- k/ D& Y( W- x+ Y# l};7 Y3 W; G0 j y) R5 T) ?
" w1 _3 m# [. c- [static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" O) Q% j1 N, s$ A3 J+ l2 y$ t4 w! u
.leds = da850_evm_tl_leds,7 K8 p9 G$ ]8 V# f2 L
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 X* |3 C2 m, Q( u& J2 a
};7 U& h6 `& G7 Z, x: K. l
6 o6 X: S4 M# B: d2 R5 ~static void led_dev_release(struct device *dev)
) z2 b) j! z% s6 B8 m( G{
; ^6 m7 z2 v+ j6 }$ R; g$ B};! ]% J5 R2 E: n: c2 h5 t& \
$ a. ?5 P( s0 e( E2 g" f; kstatic struct platform_device da850_evm_tl_leds_device = {
/ C" s' g) W$ b. h' B .name = "leds-gpio",
0 N9 C' d4 A+ X .id = 1,
! q% c9 i. \$ z# n .dev = {
; [( G d( Z- b8 t .platform_data = &da850_evm_tl_leds_pdata,& }- p. P. y @. F/ M
.release = led_dev_release,
4 d( q) N/ B' Y: u, S" B }, f, r7 q' t w9 J; u' t p( o
};; W" Q/ L; J/ t# S7 J, c
% i) A5 y. A9 q! t. R
static int __init led_platform_init(void)
4 B/ x8 I9 A2 G* Q$ u" [+ R6 E( C{
7 g, L0 \( d" g, q6 | int ret;
3 h8 F; ?! W2 z6 G0 O6 R1 w#if 0
! n5 `/ i- u) C( O$ l+ h ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' R0 ]3 j% w, X* t! D2 I- Q. @
if (ret)' ]: c3 E; F8 g6 i
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' ]# b$ C# r1 b) V8 R6 [
"%d\n", ret);
R; z( A! g9 W6 N#endif5 `7 o+ S* x" a% O! h+ S* H
ret = platform_device_register(&da850_evm_tl_leds_device);
6 b. O0 e- F6 n4 _2 i3 R& _5 O& T if (ret)
* |4 c" x4 C! ^+ V) Y( ^2 Y& x pr_warning("Could not register som GPIO expander LEDS");0 d) M. g; v$ |' O' ]- u# X
else
" ]/ J5 b1 `, x; p# w printk(KERN_INFO "LED register sucessful!\n");
2 n; f0 A8 C( w0 X" | I+ `' n' ^2 i, N- F( [
return ret;3 o6 T, B8 G$ H _1 n% W+ R
}- \& s5 Z3 i8 a- e% @2 G& B( i3 p4 |
; t) {9 k' x! s9 @static void __exit led_platform_exit(void)4 ], j) a, v; w! y' K: o1 V3 {9 k
{
- V- V+ z$ u% V$ _+ V6 P platform_device_unregister(&da850_evm_tl_leds_device);0 t* g8 x8 G# N0 i
5 Y: q: C( S; a% S
printk(KERN_INFO "LED unregister!\n");
/ [) c. C9 j% ?2 c8 y# m7 `}, k; D, b' q4 X, ~4 G1 P
$ i4 @1 C, t3 a$ t/ }" pmodule_init(led_platform_init);
$ a+ F% }3 M3 ?, o" xmodule_exit(led_platform_exit);6 V& |" }7 D" v [
: E9 B1 x/ S7 ^+ |MODULE_DESCRIPTION("Led platform driver");
7 O) l- X" d7 x0 G1 b$ {MODULE_AUTHOR("Tronlong");5 U$ ]; g! Q+ G* {) X3 ~$ F
MODULE_LICENSE("GPL");0 N0 k- s# ]' U3 k; b
* P! t, ?2 V4 K |
|