|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& C& y7 s' [0 _
#include <linux/init.h>
0 z6 h, `, E' q- h6 o+ \#include <linux/module.h>; G0 m# @7 `2 P3 d* m4 E# s/ c- s W
#include <linux/kernel.h>, a" X3 c3 y# w' V4 g
#include <linux/types.h>
; x% _- q& E' M/ j#include <linux/gpio.h>
" V( q. v6 j; l: y, ^#include <linux/leds.h>
- `: E! ?0 l/ x/ r# R# c#include <linux/platform_device.h>3 p1 R: w# n6 O% [. X& b, [
9 N- B# P8 f+ G* u
#include <asm/mach-types.h>; o6 |5 ~, o, y" u
#include <asm/mach/arch.h>
4 r3 R. K; v! N; r#include <mach/da8xx.h>- q( g" O/ L5 A R
#include <mach/mux.h>
3 I0 b2 F* x. _- ~' V! s+ D+ C6 t9 z7 n0 j' P
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ y0 W0 F& u% U3 P* M
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 L% x: y8 B8 Y% j
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" d3 z. j1 t1 W#define DA850_USER_LED3 GPIO_TO_PIN(0, 2) |/ T, e. C" H4 O O8 w0 B0 @* v
& \, C8 E5 T! \; A
/* assign the tl som board LED-GPIOs*/
6 L/ |) M! h/ b0 Wstatic const short da850_evm_tl_user_led_pins[] = {& T1 H3 q: |' a |
/* These pins are definition at <mach/mux.h> file */
9 k2 T0 ~" \/ B7 `% D( f DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 s6 @" p. U* b* _* u+ [" _- @
-1
% V7 T4 T, L5 {+ v( N6 t/ t};
2 R: t/ `7 H$ u+ O1 q2 x
( M! }; N6 d! X3 W" Pstatic struct gpio_led da850_evm_tl_leds[] = {
, d" A" T% U m9 A/ X3 @$ }7 C9 ^( j2 H {7 v, H6 U/ h5 f. g1 J. r/ W
.active_low = 0,
9 D: b. F) I3 g J, ^- ~% j. l. U4 ` .gpio = DA850_USER_LED0,4 ]+ ^. ^$ X' A. {$ r5 b T4 S k
.name = "user_led0",
# U Z( i; j" Y% |& _$ C1 ] .default_trigger = "default-on",$ k! M+ h. o1 ^& |; K) \/ Q
},0 C/ k; E7 B+ V7 {
{
& l6 L& S. X- i% D% | .active_low = 0,8 A' o; B$ s' ^0 G! b0 P3 ]4 ^! g
.gpio = DA850_USER_LED1,
' r$ Y0 K+ j$ J' Z$ j .name = "user_led1",
: a% Q2 s d0 Z# H# R9 | .default_trigger = "default-on",2 L- q. Q! Y9 @1 u: E' ~1 t) T
},
6 H. i: { u3 e8 U/ X. f9 R {7 R# J9 C2 U- Z' |) e. ^
.active_low = 0,7 p6 v0 W0 c5 f, i( A
.gpio = DA850_USER_LED2,, Q* }2 i" e, w/ m- b( R/ t
.name = "user_led2",
1 I- c9 d2 K& n) v8 w6 E/ v* f! [ .default_trigger = "default-on",
( X B7 v9 D5 |" r# m" G },
6 k a- Z" [1 v2 |" m$ M {
9 M- v3 g. d9 {" \4 r0 o2 \ .active_low = 0,
1 Z; L( v% l6 j# d .gpio = DA850_USER_LED3,$ L# a( K+ E" l
.name = "user_led3",
1 R+ V( o2 u2 _/ X2 F& S3 W( _/ J .default_trigger = "default-on",9 h$ \7 t; J8 J4 L
},9 O7 H% K( C% O( }# |' s* O
};& Q: ]! G2 x n
* j7 Q. m) X' Q/ `! F+ @' S
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 J8 o) m: s! E
.leds = da850_evm_tl_leds,
+ v+ I) F4 _: a. X* L .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! O& G. x4 z4 x- o0 l0 S) N
};9 X) g0 [9 C7 B) M/ k
; f: v* t( X4 k$ B0 `static void led_dev_release(struct device *dev)5 d3 |/ A* I2 ^- b5 Z1 z
{
, ]* }2 X+ K& Z5 n) F2 D- A};3 m7 | ^: E% p; O) d" w5 V
+ o) e8 [2 a {( m! _
static struct platform_device da850_evm_tl_leds_device = {
4 c# c+ I. C) y, h- Z& | .name = "leds-gpio",
. K B. Q) x# \* t" z+ E .id = 1,' u4 Q# V8 J% l& Q- e0 K! B
.dev = {
& H: r N& h$ B- Z* ]2 f6 y; v .platform_data = &da850_evm_tl_leds_pdata,
7 w+ [8 e4 u t8 I .release = led_dev_release,* R( L2 {: Y n' J8 [- @
}
' u4 P" ^0 K/ ]% F};
6 b, R$ g$ h1 r! Y# s" u" G
) f5 c& u/ F, z5 _% }static int __init led_platform_init(void)
A: L6 P _: w: L* N* C{9 r8 Y% c* ~8 p4 |2 c! }
int ret;
: P4 c6 ?7 B S8 i#if 0
8 M X/ e6 L- N( ]: U$ j: {5 S- a+ G ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ a' u3 K, \2 o0 v
if (ret)4 i- M5 Z1 [) f
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( W* T5 f$ X, C& E$ A4 I4 g3 c; t
"%d\n", ret);
7 F9 @+ J/ q2 ?#endif. F( U. E4 g# u+ g
ret = platform_device_register(&da850_evm_tl_leds_device);5 f! G1 C, L# ` v/ U
if (ret)7 c9 H1 Q4 K8 D) q" s
pr_warning("Could not register som GPIO expander LEDS");
$ J: q' I5 J/ s4 ~ ] else
7 l5 l8 x2 r, z' |/ D" c5 ^ printk(KERN_INFO "LED register sucessful!\n");3 {( ? v& s. |5 ~) B) p* g3 ] D+ N
9 ^4 K6 `, v! J) C3 }
return ret;7 a. o6 e* ~9 M% K( a# b
}. [% i: @5 B6 r0 Q2 @$ q* O: J
5 D/ M% n1 s+ N" I
static void __exit led_platform_exit(void)
) r' X# [5 y& Q0 i1 A9 r2 }{& G8 g; m$ x3 m- e7 X/ W" p9 ^
platform_device_unregister(&da850_evm_tl_leds_device);
6 t- H! U. |, D: P5 W4 e( c! q8 \0 A/ [3 g! h" z, m. A
printk(KERN_INFO "LED unregister!\n");2 Z. G* H2 T/ Q! v9 A2 u/ b& C
}
9 W" l2 d& |1 A# e* l8 [, L, Q
module_init(led_platform_init);& t- ^) s7 ^; T7 j
module_exit(led_platform_exit);
R) ~( A4 D4 M$ j3 C! Q0 N% H1 s7 |
MODULE_DESCRIPTION("Led platform driver");4 ~7 Z) e, D" X+ [; h6 \
MODULE_AUTHOR("Tronlong");9 I# z: k- c& G; g, x Y
MODULE_LICENSE("GPL");8 a' ~/ _8 p/ c( N# ]+ t
, k8 {0 t2 a7 o" k6 p
|
|