|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ o7 _; I. C; Z- ` k2 d: t/ ^5 C#include <linux/init.h>
3 ^0 ?- H3 } D% v3 k. z- P#include <linux/module.h>. G5 z) `' I& P* v6 F. p
#include <linux/kernel.h>2 t8 \3 g4 k0 h) b
#include <linux/types.h>2 m: X; T: W+ h) N
#include <linux/gpio.h>
. C7 P. @5 m; R3 V( J#include <linux/leds.h>( S8 T7 m, n# Z4 G5 v0 A0 x. e$ k
#include <linux/platform_device.h>( T# H8 j4 b; ^) `: F- P
& U) L& E1 ~% P% E6 O$ v
#include <asm/mach-types.h>
7 b6 K3 y. H4 q! [- }0 |) G: ^ h/ _#include <asm/mach/arch.h>- t$ X) D( J! k
#include <mach/da8xx.h>
7 [9 x% [5 u' @' a7 @#include <mach/mux.h>/ T% W3 M; d: E4 n2 V( h( S ^2 d: ?9 v
3 e7 M5 R! N$ A5 x( Y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) ^+ q& i7 j1 W" h
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ S& D, x4 P/ X3 _+ ~$ ]4 ?; ^#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) K- _. q* S/ n! J! N# t#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* e5 I4 x- g/ k
; @8 ~, \! ?3 H4 U" x: o/* assign the tl som board LED-GPIOs*/
0 ^/ G% m/ l V+ o# @; _static const short da850_evm_tl_user_led_pins[] = {. W1 L- B# S' r3 H% M& S6 \
/* These pins are definition at <mach/mux.h> file */5 x {! a, u, V9 c: \3 n! h/ D
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 z! W5 Q+ ?: [! f% v& t* B5 s- F
-14 \) D4 k. z$ z
};, {1 N: ~, L( E& @
7 F; X8 m4 D/ K5 _1 M" |, S
static struct gpio_led da850_evm_tl_leds[] = {
9 b( Y" t7 P; B( | {
% V9 M# X7 d# ]( D .active_low = 0,4 |7 u( t4 m& q( |; O
.gpio = DA850_USER_LED0,
" E9 L! ~7 a2 W( l, X0 G .name = "user_led0",( L% e- B% L- v! r( x+ p' J3 M
.default_trigger = "default-on"," ~5 S! p' d) R7 g# t' ]1 }" `: ]
},
! d2 H6 {9 z) C% c/ _. ] {
' U2 K: F9 q, H .active_low = 0,' i( o, J" M7 J) H3 v- E
.gpio = DA850_USER_LED1,
, Y& A+ M$ ?+ t- s .name = "user_led1",3 } P3 {$ X7 {; Y% w) y9 L
.default_trigger = "default-on",
4 O; d' l7 t, x: w2 H- r+ q },$ u, s; ~; J: m% P
{
! U' }& ?; k. s; C6 v! ] .active_low = 0,, z- b0 H8 D! E d. f4 K
.gpio = DA850_USER_LED2,
1 L$ D+ s+ x0 B1 ~# e .name = "user_led2",. k9 Z* I+ i! C8 A* b: U- s n
.default_trigger = "default-on",8 y8 ]) s, r4 s6 X$ ]
},2 S2 l1 b2 \( l8 z: `) ?: H7 F2 ?$ q
{6 x! ~ B7 z2 W3 ^0 M' w
.active_low = 0,. u+ q' h6 |0 M' O
.gpio = DA850_USER_LED3,; l7 ]( X( h; r7 v, j2 s' D6 i( J
.name = "user_led3",
& c# [# _6 o- D* |5 J( J .default_trigger = "default-on",
C* W! B; u5 D3 `- t* u1 _; W s2 r },! ?, H- g* G* d
};9 N& |- I7 o; b) Z- d2 g
9 z& T: F" O) J- Z. r
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' S1 V7 T3 [2 _
.leds = da850_evm_tl_leds,- D% ]3 Q4 Q7 N$ Z% F
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) m: d0 H0 o+ n# n};8 f) ~7 p% S0 f. Q- ~3 F
K, D% R+ j5 e0 y& F4 @static void led_dev_release(struct device *dev)
1 Q3 k( e C! b3 W4 G( D{: Y+ \* X+ ^7 K v3 [7 {; k3 P
};
W+ L3 p; @! e0 N% u9 C; O) `' w" `0 i7 E ~. c) h
static struct platform_device da850_evm_tl_leds_device = {1 z: e* w% N4 T, P. Z; F
.name = "leds-gpio",
' f# q2 n. T$ n2 f0 _- ?' b .id = 1,
0 q O! @9 [ M% t .dev = {, C4 Z* {+ Q, M3 g
.platform_data = &da850_evm_tl_leds_pdata,2 Q/ e b, [: [& I
.release = led_dev_release,8 |0 ]+ g3 c- O) k
}5 p9 A. j s0 F2 o6 j
};
U% a0 T: b. E
3 U8 q: y/ v0 H) v% k; i5 F5 gstatic int __init led_platform_init(void)# a. i) E6 w# I8 B0 v8 E
{. e' N8 D+ h0 w
int ret;
& G4 D# j0 j/ f3 H5 A#if 0
' x e. ~ ?3 T( m. W ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);$ L+ W5 C/ F8 e; t4 V; z: _2 G7 A
if (ret)
* R1 i1 C$ @- M* U pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! U$ c' l0 Q6 | "%d\n", ret);% B6 d) J0 j' n& g% F1 y" A
#endif7 G* {; n6 C0 X8 v& \
ret = platform_device_register(&da850_evm_tl_leds_device);
. J' N' y# r# ]/ \7 [2 m if (ret)
4 W% @. i1 y+ r9 U( p- N" G6 R pr_warning("Could not register som GPIO expander LEDS");1 V6 m) m$ V* H" J- [* \% @
else( y# b0 H. W1 f- V
printk(KERN_INFO "LED register sucessful!\n");* H3 G% @& Z0 z V9 a) ]4 F0 T
# a1 E+ A+ c0 e G! l) V& F5 z
return ret;
) ^+ t; Q7 {" s/ {" b1 H7 m/ {: f}9 j3 Q5 \/ R! b. A: T
/ h# v7 @2 G% z A8 Ostatic void __exit led_platform_exit(void). ?6 _; {6 g' n2 m
{
" K5 C, c; y# O& q platform_device_unregister(&da850_evm_tl_leds_device);
* O6 I. Y6 I' I0 |* F+ n
* _( o% s2 D* L2 ? printk(KERN_INFO "LED unregister!\n");
! I. @ H$ ^8 O1 I} b( S5 F8 |6 k4 q4 P
9 d: Q5 D n6 H v0 r. {module_init(led_platform_init);% P9 O T/ |% M3 i9 l
module_exit(led_platform_exit);0 l7 r; ]. k, l8 G( {
$ ^2 M" p/ A3 m2 i, dMODULE_DESCRIPTION("Led platform driver");
; N8 Y/ s8 R; K+ t8 rMODULE_AUTHOR("Tronlong");6 T( p6 ~7 f" T! A' A
MODULE_LICENSE("GPL");
: P; }! j3 d* H' a/ a/ m& h/ k
% @( R5 X7 H! B* v$ Q |
|