|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 r5 K3 d) | |! F! \+ K' p#include <linux/init.h>
0 n/ \5 G, j: P, w#include <linux/module.h>
: Z3 K8 z. q) t# F @ C1 ]#include <linux/kernel.h>
: z# t+ j3 F8 ] i& B& f#include <linux/types.h>
+ R4 ?+ z! ?, Y# {#include <linux/gpio.h>$ M) m+ u: \7 v- U( n' ~9 _1 y& b
#include <linux/leds.h>; m( y' y+ V3 ~
#include <linux/platform_device.h>, G5 N- q D9 |& k9 V) L4 l( @
, S: F& I6 O3 A" y2 Q; L0 R2 i#include <asm/mach-types.h>
4 t/ K3 _: g4 W; C: v- y#include <asm/mach/arch.h>+ B# j8 Z1 Q$ E4 \% Q1 e
#include <mach/da8xx.h>( x- T* T, h5 k# e3 y4 q0 L
#include <mach/mux.h>9 W+ t, U1 O l
# r- w$ V: A7 X1 D#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" D/ J( K% v. q( q" V0 O. H. W
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- c1 S) e1 [# c5 s* _#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) R! A; ]% c" e' U% z( B; J; s4 S- M
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) w* M' _8 B/ \7 t4 o9 ^$ [
! f6 I* X+ v1 \# ]/* assign the tl som board LED-GPIOs*/
# {/ i8 i; j1 q0 [" u6 rstatic const short da850_evm_tl_user_led_pins[] = {
) ], P' i3 @# Y# f: ~ /* These pins are definition at <mach/mux.h> file */, J8 @" C5 x+ }/ {
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# p' j. d6 H) f -1
3 p; M4 ?% B/ \5 l: U) ?& M" A};
! z& P# B1 @5 x" t) U2 N' i
0 O" l3 |! ~- B4 I8 y, ^static struct gpio_led da850_evm_tl_leds[] = {
" ?- Y; E: P+ j5 R {
7 d1 }: D. F: L2 A* D: D .active_low = 0,3 {8 f( L% x, p
.gpio = DA850_USER_LED0,
' j4 o2 P! t/ p% j- z. i( K+ i: e7 J( o3 { .name = "user_led0",$ w! F; i* e! o" o) ]) M
.default_trigger = "default-on",
' m& H0 u& r. X' U; v3 n },: H1 o1 e u, U* C0 j$ |
{
6 T, m4 ~9 J' T. r; N .active_low = 0,2 U" z, j0 M7 L3 G' j6 _/ Y
.gpio = DA850_USER_LED1,
# [1 P) i- Y6 u/ w .name = "user_led1",
' J. k" X9 ]: {* F+ Z+ t% ] .default_trigger = "default-on",3 R3 {3 Q9 {; _3 r! q3 h0 I" C {
},$ L8 d& [% s; B+ V8 }: j4 c/ f
{
' f7 _# u" R' Y1 B6 Y .active_low = 0,
2 Z, B/ q5 E' r9 k .gpio = DA850_USER_LED2,
; g$ z+ h) J. d: W .name = "user_led2",
& d3 s+ R7 v% {3 Y) Z+ }$ t4 i .default_trigger = "default-on",
' x9 D! q1 ^, z0 | },: u2 Z2 p! X8 Z X( P; g1 O) e c
{
! n+ k( s, j& X/ Y% |4 z& ] .active_low = 0,6 T( k) A" H ~( `! }
.gpio = DA850_USER_LED3,
' h# j" h( l/ A7 | .name = "user_led3",; G, e1 b2 g6 R9 D$ Z, V5 ^' D% d4 S6 V
.default_trigger = "default-on",
/ O0 o- z( h9 v5 e2 F },' s& n7 D' q' v, I1 E* ~9 u( F
};
% z* |& A y# D: ?& X
- q" ~: f6 [: F, s2 O6 Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( [' q# \; p+ i .leds = da850_evm_tl_leds,
( e) k0 S: x+ M6 t9 ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; o2 |9 s( G5 K' \- }
};. V( m' Q' m5 ~$ V
! {/ L1 G5 u7 [7 [2 Q! L+ @
static void led_dev_release(struct device *dev)
1 j( n% a) K# X) C{
6 n7 v) b# Z2 ] Z& o' b# [6 `}; c! L+ {, C$ b: V$ G" a& `
; d) a5 P8 G, |% ? k) C7 x. M
static struct platform_device da850_evm_tl_leds_device = {
) K" T# Q3 C/ a2 ?$ G/ E0 l+ W .name = "leds-gpio",5 K! U* _. r0 M7 `, L6 r
.id = 1,
9 c- h" O- i; h3 ^ .dev = { Y1 b+ D2 z$ z* B4 s# U$ N# ~5 _2 Q. _
.platform_data = &da850_evm_tl_leds_pdata,2 |% h: }5 K0 Q# }" q5 D& a
.release = led_dev_release,
+ U! w" }# Y7 L. u }
; T& I5 R- Y: O7 Q+ H: h! X6 E) s};* O$ U( l, w$ w7 c3 }: B8 H0 Q0 M' `
Q: k) F* ~( @! D0 A: z; lstatic int __init led_platform_init(void)% ?8 {% V0 x( g- G( [% [" C
{
( o2 ?1 |* ?; D ~; Y int ret;9 S5 ?& }2 S# `3 _; {3 J
#if 0
. g# k' h3 `. J, j [! u( b# n ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ ~$ B1 g6 [6 Z6 Q, ], T/ v, p if (ret)
, _' e. b$ }4 s! p+ D pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 Q) D1 r4 v1 r" F3 G8 L. {
"%d\n", ret);
, f% l2 C. R. Q Z9 _7 N#endif
2 v1 i7 P5 V: |3 R. `, I: Z$ b ret = platform_device_register(&da850_evm_tl_leds_device);$ Q+ Q) A. a" E8 J4 T* ?
if (ret)* P- b" z. e3 T3 |. B; @4 K# X: v, Y
pr_warning("Could not register som GPIO expander LEDS");
. c B' b8 n8 C8 z' p& z else
' z; T1 W' a1 i5 I; z) H; Z! w( S printk(KERN_INFO "LED register sucessful!\n");
; M& Q: L* `1 {. D, E% S2 M. Z+ `5 t, i: l
return ret;$ o3 E1 C7 [0 h2 q- u$ G {! Z
}5 l- `: V9 M: c' d
5 t& ~/ a, U* |( d7 X1 s
static void __exit led_platform_exit(void)
) V8 [% l; C# Z' X{
# t v/ v$ J( |8 U) t: Z3 y+ \ platform_device_unregister(&da850_evm_tl_leds_device);( O5 S6 ^ X# {/ n7 |/ D) O
0 \# v/ k% Y( g
printk(KERN_INFO "LED unregister!\n");
4 w y* d9 E; Q9 g}
/ R) H, w) B5 v, H; k5 Z) j# G0 y# Q0 z4 k. m
module_init(led_platform_init);) |1 O% S ~2 V& K& }
module_exit(led_platform_exit);
4 Y' w& e. O# l h( ~) _
7 }* Z0 T$ i' W, iMODULE_DESCRIPTION("Led platform driver");" A7 h( c" g; O2 Y O, h; ~
MODULE_AUTHOR("Tronlong");6 }/ m2 q0 Z0 q( U
MODULE_LICENSE("GPL");" L, \/ g% _8 Q, [5 M8 @& I( u6 H' P
% s4 z' @+ x% J6 m) P
|
|