|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' s% N( y; h/ b: P. c, @5 |#include <linux/init.h>
* @% s7 U$ e+ P5 n9 U#include <linux/module.h>
" K5 ?% y ~# |. t3 }#include <linux/kernel.h>, p; j# Z/ {$ U- o* t
#include <linux/types.h>
! C6 W1 {! k3 {/ J! w6 s#include <linux/gpio.h>4 n# x+ c; S6 W% n- v
#include <linux/leds.h>, p( v" n; ~3 i j( g
#include <linux/platform_device.h>, _. G3 c5 G# {2 V/ t# D
c# {+ S9 t/ X; G
#include <asm/mach-types.h>, l8 k# n/ a' l
#include <asm/mach/arch.h># p) L( P1 @# ]: k
#include <mach/da8xx.h>/ g0 Y" D {3 u
#include <mach/mux.h>* B- @ L* \4 O: @0 [
$ E6 c! ?7 v( Q& d#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 n+ ^# x+ @% d( X
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): m+ I C; X' ?# b+ I9 g
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ E0 [- I$ T, D0 H8 d# j* N
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). z6 v. {+ x N5 M L9 j; q/ {
1 P8 w* t1 `; J" ?% Y/* assign the tl som board LED-GPIOs*/
' O. Z+ Y r: O. @& h3 s) l# Qstatic const short da850_evm_tl_user_led_pins[] = {( o6 Z7 b; i. ^( I6 k
/* These pins are definition at <mach/mux.h> file *// @3 a T x( m
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 s7 Z, ?7 z6 M, V9 I* {, H* |
-1
+ T+ o& w) R: r) d};
: R1 O) h$ _4 g( j! l5 o; N
6 G' n! _: u, A3 `- e! V# t1 k+ \static struct gpio_led da850_evm_tl_leds[] = {
4 ^. {- Z/ O- m. g3 a: D {
/ v2 o, B7 {0 f+ H8 @4 c1 c .active_low = 0,+ n" V" n# A N" O% ~
.gpio = DA850_USER_LED0,- T' H& M5 l; m+ [8 |" p0 [
.name = "user_led0",9 F: t+ A( K* |" [/ B/ q: v& b, Q
.default_trigger = "default-on",
) f; F h6 x- t. { m },: p# p+ |4 |9 k3 d* `4 g# t' x
{" B! ` c0 O8 E9 s6 i# o8 E& O
.active_low = 0,* Z/ B; q; o# |. {; U. }! K
.gpio = DA850_USER_LED1,
3 G5 B" s4 w0 @8 D" F .name = "user_led1",# m3 u. r6 N! i6 H3 L
.default_trigger = "default-on",
3 g& s( g8 X' @( t4 q0 ^/ I( u8 g },
. S7 p" a* W: G {0 t4 Z6 h# H6 R) W/ K! ~0 I1 X
.active_low = 0,
" p/ J) D0 B8 D% R% i' F/ n0 m .gpio = DA850_USER_LED2,( Q- S) B/ e9 B1 d/ c) h L4 N
.name = "user_led2",
7 y9 M5 W3 N4 e) S& ^* [# W3 @ .default_trigger = "default-on",
) U# ]7 C: d6 X3 O },& v, @# b! g+ j! }3 M, M$ s/ f
{
8 I' v5 Q0 h: Y3 w3 ~ .active_low = 0,) f3 N5 F, F- G5 O8 K( x
.gpio = DA850_USER_LED3,' l3 d6 @2 w5 e7 Q4 i/ @# j
.name = "user_led3",& C) I4 g' N, ~8 [
.default_trigger = "default-on",
; H3 [- f7 i( S" H6 ] },
& z; G6 v; H% X% i};* g1 a7 j% b) p# n; P$ X" C
9 ^0 o) B# D8 b' j; }static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ ?, u; E. T1 W" `" K3 A
.leds = da850_evm_tl_leds,5 |4 h0 v8 E& l* X1 t& x
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 L5 q0 n+ \- b% A/ q2 C2 f5 l
};6 O. e! | b2 v" P
" H+ U0 O, z) u: q2 m- ~
static void led_dev_release(struct device *dev)
4 G7 J. x: a4 R, w: C{% m% x; E7 p0 H
};% |! u+ O7 K% r" i; d0 b g
0 P. w# D8 t. D, P7 T/ }1 t7 u$ q$ ]7 w- dstatic struct platform_device da850_evm_tl_leds_device = {3 U/ s: P! k7 {$ p1 K6 b+ @
.name = "leds-gpio",
# c+ M! u! V$ }8 T4 W$ E, w .id = 1,
3 D: w* T# r6 C( w, ` .dev = {0 P$ R! Y/ T7 d
.platform_data = &da850_evm_tl_leds_pdata,
, E0 V) q- q$ {/ x& ^4 w .release = led_dev_release,
/ a/ S1 [2 t2 \4 O }
8 [7 P5 @; i, j: d% J4 F5 X};
% J L& ^, O( ?! m4 B! p- l; V5 ?; L- W* T
static int __init led_platform_init(void) C2 N3 y. o- W; {& g
{
4 k" G% R! t( j' U4 s: U# ~+ M5 @+ w0 q int ret;$ ^+ O- @9 V" e
#if 0
9 Z% S4 @1 d' Q! r7 L8 I8 l6 j ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( c7 g3 X5 h2 R1 |( V$ e if (ret)# P- r, D# s+ H# H9 X
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 n7 k9 J% i) H p' v2 A
"%d\n", ret);) ^( x' o6 O! q( M1 A
#endif7 Q% f. N6 ^) m2 F4 K% X2 n% l
ret = platform_device_register(&da850_evm_tl_leds_device);% ?0 ~% n+ T6 z2 d/ P- t( A+ ]5 D
if (ret)) [' C W6 ^& P* u/ G- U" d6 {# \ _0 ~
pr_warning("Could not register som GPIO expander LEDS");
( Y2 K7 E3 ?, T1 L* N. E else2 u/ p/ z& z# h# l& `1 H3 e
printk(KERN_INFO "LED register sucessful!\n");9 F6 S' E5 h- j- h8 |/ ]4 }3 H
* V/ q# W _ X; o O( }. y* P( q
return ret;% [ {- w+ K; Q" r
}
' E' O* a5 d, e$ N0 F9 x& [6 D. z" d
static void __exit led_platform_exit(void)
) Y/ A7 Z7 L) N7 Z{* |: p; f. o5 K) {1 G
platform_device_unregister(&da850_evm_tl_leds_device); h: a) ^4 w( i2 ~# K$ P1 S
3 X# ?0 `3 Z# B; m) n, i8 V printk(KERN_INFO "LED unregister!\n");
) ?- w5 k" K- U; H/ n, |( i}
' v# ~# W* {+ ~- {. f) H0 o7 S1 u- c7 a6 Z6 k4 \
module_init(led_platform_init);& G( I6 c3 L/ l* e! F
module_exit(led_platform_exit);5 f/ k0 F6 g+ G0 }: y% G0 ~% S
$ ]1 K2 i, a/ p
MODULE_DESCRIPTION("Led platform driver");
4 |9 L1 @/ D# w) YMODULE_AUTHOR("Tronlong");) U, L( W) V) J+ B' U0 f T6 w3 L
MODULE_LICENSE("GPL");
6 t$ l h$ @: p' R! ?) V$ _2 {& R# @: ]. h" O3 E0 C
|
|