|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& {$ U0 r7 l$ E: s#include <linux/init.h>1 M- z& V1 g# }5 t
#include <linux/module.h>. M( k* D8 a# I6 `% d
#include <linux/kernel.h>
$ D, w+ {8 B5 `7 C2 p9 I#include <linux/types.h>" ~$ b+ f* \+ c. H; _
#include <linux/gpio.h>4 F1 z8 E8 k- W7 R
#include <linux/leds.h>" G" K. k+ y! z: D6 R
#include <linux/platform_device.h>2 e t' ~. x" |( s7 a+ v3 V$ H
+ X1 `' w( f' z: g5 ?. T#include <asm/mach-types.h>
% N4 `/ X" u8 W" g9 x* \; @#include <asm/mach/arch.h>
5 {& e7 @# ?+ o" z+ Z, Y, Q#include <mach/da8xx.h>( o, C- h( y C& n/ v, s, V0 O
#include <mach/mux.h>
1 m7 C( n; L( d# n0 q' m: V* v1 J- {2 t9 X- ]1 }) v1 L
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- s' m. F* h4 H2 D
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" {2 o" }2 ?$ @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- G3 |5 K9 \+ I' ?5 W6 ]! \7 z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) ?. r0 _8 l9 x* a; E
9 Q- F# @' y1 N/* assign the tl som board LED-GPIOs*/, L3 H$ n0 @ Z6 a( E8 ?* P
static const short da850_evm_tl_user_led_pins[] = {
1 \ F' N* {. D H /* These pins are definition at <mach/mux.h> file */
4 u5 f+ f! q, p DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' t: u; x# ^ c! z: N" S
-17 B/ ~7 N7 |* ?. ~9 h
};
p" ~3 t7 g- O: T' l
' l) S. `0 u4 G- bstatic struct gpio_led da850_evm_tl_leds[] = {
( v' I( A' ? r P" ?6 X {
* q% d: ~1 ]- d, S3 p2 g4 _ .active_low = 0,2 B" W( R& d( e" K
.gpio = DA850_USER_LED0,& Y8 g/ k8 r8 R1 m, ^8 x# H
.name = "user_led0",* g) j! T' F6 y& B# T
.default_trigger = "default-on",
! G% j! V$ J9 g) ^! S4 j% W },
% J! C: h$ b" h' B2 M, y {
+ I1 Y6 n3 o3 } .active_low = 0,
, r/ K2 k4 o3 I ? .gpio = DA850_USER_LED1,
# @1 x6 U( ^, `2 W6 A5 @; M .name = "user_led1",
5 e3 ]8 x( I, S .default_trigger = "default-on",* V4 ]0 f+ o. G- K) X
},/ g' Z) L( K2 V' K) O, y! {* h
{
5 e1 M) p; P o* j' A6 k8 K2 X .active_low = 0,
- Z9 H3 G6 Z, Z7 @ .gpio = DA850_USER_LED2,
0 l) {9 j; y' R5 g4 b .name = "user_led2",
! d' Z0 I; {; \) a2 { .default_trigger = "default-on",' \) p) O; p/ H
},) Q( I# X( ?- U: ]; e
{' u. `5 H7 C5 t) O4 e
.active_low = 0,$ Q6 I2 U. i4 c6 d+ ] {
.gpio = DA850_USER_LED3,: d9 A: W$ [: T, c/ U! ]
.name = "user_led3",
$ d+ y* k7 b { .default_trigger = "default-on",
. ]" C5 I- ` I },1 V! L4 d" M6 O. L. k
};1 G) p& a7 F/ o: V! q
8 b$ o$ d( J* _" { d2 gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; j M6 ^! A; d( a( J& c$ v
.leds = da850_evm_tl_leds,
. r# g+ n- ]2 _( s7 f& `; a .num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 c9 B& q; U* a: K6 N2 {/ G
};: f5 P0 U) f; F- L* r! k
$ y4 ~& U8 u6 V& a! B, V) h# _
static void led_dev_release(struct device *dev)8 W: k \& W+ d
{
: x1 I4 h; T1 ]3 z};0 R4 q4 p( V8 `. a/ j; `' s6 R4 T
- y5 e3 Z+ t2 W) C+ v( L
static struct platform_device da850_evm_tl_leds_device = {9 Y6 f5 }% P" ~0 I s
.name = "leds-gpio",
! W; d$ w( l5 F, ?% [& z2 P .id = 1,
4 k0 H$ A2 j; P& \ .dev = {
% P; y4 y4 I( N k) Q0 X; e& L# ^; G+ J .platform_data = &da850_evm_tl_leds_pdata,- f( e9 e. |# u& C
.release = led_dev_release," w% n1 h7 ?6 Q- n
}
# Y7 b# q( y8 d5 L6 Q6 h" _- v};
" l8 \$ N5 S7 F# {2 z
3 E( H$ }! E0 a) v( mstatic int __init led_platform_init(void)
" t9 b0 W" N; d w ~6 k{# s1 D1 f7 S7 X* H) g& J" h# P7 o
int ret;
( Q; B: Z' H/ R6 v% C* R- K2 U$ w#if 0# l/ m" u) r$ p B2 ]' r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); `9 Z' U; A7 N/ a
if (ret)
: G0 c, t2 `2 K8 | S pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 {8 S7 b. T0 `' d/ z
"%d\n", ret);
9 c' _8 K( d6 q#endif( v$ {) e* U7 [1 d* R/ X
ret = platform_device_register(&da850_evm_tl_leds_device);
: a+ u( o9 { X, u) j" o" a! `5 _- E, B if (ret)+ v+ e. x( \/ c1 O
pr_warning("Could not register som GPIO expander LEDS");- L# m% e: z: T5 g$ y0 W
else
- p" X8 X! k+ b i0 O" h printk(KERN_INFO "LED register sucessful!\n");6 Y1 J J- P% E( v2 O
1 h+ ?7 T- U, F/ p4 Z7 T! @2 M return ret;# w5 X$ e9 d1 x9 q; o- g
}
" s% h7 w+ F' r$ ~2 X. U$ s) | V0 t! D2 {+ a% d- p
static void __exit led_platform_exit(void)
/ g$ R* [4 h* Z* G3 K{
5 M) J. J- F7 [. M0 b+ E3 V% o platform_device_unregister(&da850_evm_tl_leds_device);" [( v" `9 Y+ b
+ \6 e: B9 g* i4 s5 z3 D
printk(KERN_INFO "LED unregister!\n");
9 b6 j: i" ^0 V+ |, ?( Y( }}4 k# v6 y$ s, A# q- ^4 v' I( T
2 a/ s7 p& J1 K5 E; o. @. x
module_init(led_platform_init);) m& h5 s& K* s, \6 D9 n( Y' I
module_exit(led_platform_exit);) b1 t7 N7 f, }* z; {
) @ |( u2 S9 HMODULE_DESCRIPTION("Led platform driver");
* \. H1 z2 n" m5 P; x- RMODULE_AUTHOR("Tronlong");
( F4 F% f1 A9 m" J3 _+ [8 {, b, u9 dMODULE_LICENSE("GPL");
3 p" D/ ^# g' k- o: Z$ g
3 [& k0 v1 [' g5 N |
|