|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. L* ]; e# e6 o+ r& f$ R6 ?4 A
#include <linux/init.h>
# J& [1 e1 j; l7 c9 ]) A#include <linux/module.h>
0 h% k. R2 h" s#include <linux/kernel.h>
* n/ F! M2 v" u; T#include <linux/types.h>
) D) U J6 c5 ?. i* \" u* K# t#include <linux/gpio.h>* j' h) N0 |9 T
#include <linux/leds.h>; E1 w& b! Z' Q* V/ t2 L
#include <linux/platform_device.h>$ v' R4 O' w( P {$ C8 s! E" W
: |( m p6 i" L4 A |& P5 O A" S' j#include <asm/mach-types.h>
. L5 @8 u$ |/ X/ B3 C: R#include <asm/mach/arch.h>( k) z( `- n. l" A3 ?6 w, w
#include <mach/da8xx.h>
7 a! v% j: t& N#include <mach/mux.h>
* ?6 X& h8 A9 G+ B; Z
. d, q/ M1 l4 y- G- `: I#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& _5 a6 S+ p/ H* \ b
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! v9 {& o2 x# k; J#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' x! u! I+ h ~% ^+ H! c
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' Y. j' U+ H/ ~% r2 n% [, Z
5 o% ^; C8 d9 p/* assign the tl som board LED-GPIOs*/+ y0 m" j5 b8 O5 N8 ^' A0 W
static const short da850_evm_tl_user_led_pins[] = {
" K! c' [2 b9 z' A /* These pins are definition at <mach/mux.h> file */ X' Q% Z r! ~9 w2 p, x4 ~
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 u1 Z; P# t7 F$ y- o" {4 b, n: ~9 C -1
9 l# O. P$ @1 H( {0 Y9 r};
0 b1 ^ v5 M/ B7 F7 ?& z" a+ s1 Z) l- y7 A' O. h
static struct gpio_led da850_evm_tl_leds[] = {
# j* N8 \5 g y: M& M {
# o" Q# k: K5 J5 n7 ` .active_low = 0,
`" g/ ^0 o, h/ h# b: n .gpio = DA850_USER_LED0,
2 j! f/ \0 h; C .name = "user_led0",3 B$ ]; Z' k' u# A
.default_trigger = "default-on",) q1 G7 C2 G- X+ J0 c. B6 R
},
' ^: T0 l4 n, [( S {5 ~$ g+ K/ m L, x9 J' b' r. W
.active_low = 0,3 y( l# A- S( A1 x5 z( Q0 n
.gpio = DA850_USER_LED1,$ Z" O( i/ _) _# N' R: E, n
.name = "user_led1",
& b* W6 n$ |; b+ R u/ m: J& M( w .default_trigger = "default-on",
! q- D( Y1 W( A9 ~2 A% b$ y- f },
6 [; h# d: i. ~$ H; u; e/ n {% P4 z7 E& X5 U: K
.active_low = 0,
8 P. f/ N+ P6 \8 T) y, k .gpio = DA850_USER_LED2,
8 b1 k6 _' g: T M$ ?$ }1 d .name = "user_led2",% D* H1 s/ {$ e3 E3 W5 J4 S' V
.default_trigger = "default-on"," D! n+ n; c( w; ^3 j, X$ O* L
},
% m8 a4 t& D, V6 b4 T' ]$ b {
5 ~( P& U1 `3 O8 c .active_low = 0,
1 c4 ]* E- ], f! s* N6 j) @- z .gpio = DA850_USER_LED3,% l/ d8 k6 p- ]7 |" @/ |
.name = "user_led3",3 }$ {5 ]5 i7 P0 ]* f" `
.default_trigger = "default-on",- b" [. z% ?9 n8 G: R
},
" Y- x- r# F- x! y% r};+ P' x+ `2 g$ L8 T/ Y
: B. E( y. S& g% w; T
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! L! H8 ]' o" \" r7 C$ e* K .leds = da850_evm_tl_leds,
: @. U" u, b+ E' s V7 D, z/ M5 }) y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( ^6 g5 q8 ^3 H- ^6 ^. q& {' b}; {% T/ j* d: M+ e! U
) a* M7 ?$ q h$ G$ D* p4 K1 |static void led_dev_release(struct device *dev)
; z# ], R1 Y0 [) C{6 h4 }. e3 v% E! D2 ^" v2 k
};4 T- B4 O( X# P$ w5 }
+ z. I, f/ b6 N$ g7 |/ astatic struct platform_device da850_evm_tl_leds_device = {4 N6 {8 M: n) g( q! E# X
.name = "leds-gpio",4 W$ h) r7 h8 F. ?
.id = 1,0 Q3 s$ G! v; J+ N4 \4 r3 p" k+ B Q7 w: u
.dev = {/ A8 k8 _9 z. p. m
.platform_data = &da850_evm_tl_leds_pdata,
* K; Y; V; Y# J .release = led_dev_release,
, i) W `1 h* m+ V$ W9 B }
% g F. U% R% I};2 P& K# t, r0 F( w
L( ?( F: n) [+ X/ y, Sstatic int __init led_platform_init(void)
( h8 J* m8 S% v$ [2 B2 T& v$ G{
% x2 u+ o* h0 Z1 y$ N- n5 N int ret;1 I8 b8 F, s" t$ J. t( e
#if 0
8 f- o6 P! r+ D ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
\9 r# W" `% P& g) x c: u if (ret)
( q3 G# W- x6 M- t" D pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ C; f j; M, j U "%d\n", ret);
0 B& `9 w+ {) U! a#endif; T# A' y9 A1 G4 h0 I
ret = platform_device_register(&da850_evm_tl_leds_device);" ~7 `5 ~- C* p: S) @0 g
if (ret). D3 N9 Y0 T) H
pr_warning("Could not register som GPIO expander LEDS");
7 x. d* x* I; ?( R! |) P. K! X else& M, B9 L1 E8 ?& J
printk(KERN_INFO "LED register sucessful!\n");
, F' a- p- T7 G0 @% J
( }6 X( M7 F& B return ret;
7 U/ @/ M5 I$ C' J; d}
" o" E6 z+ v2 u" S3 R7 H% [5 x- i/ L0 Q8 {9 j) r9 |' ~( e. r; y
static void __exit led_platform_exit(void). {/ W. P7 J d& n% p6 _
{
% K1 O! V: g5 }8 G& X) z6 U platform_device_unregister(&da850_evm_tl_leds_device);* C2 O4 e; |& i. y& G
# M) |/ v7 @* A2 |" T
printk(KERN_INFO "LED unregister!\n");5 b4 S! `, u7 h5 D. f! v# X6 y j7 n
}1 b7 V" d- l/ Y
0 @- O/ Q. g9 D. r+ A
module_init(led_platform_init);
/ l/ V8 J) g; n# d6 @# T# l3 _% kmodule_exit(led_platform_exit);
! A* g% j! t4 y
5 t9 X8 L6 p( U2 f2 p" HMODULE_DESCRIPTION("Led platform driver");& y) T5 w/ z2 |8 d
MODULE_AUTHOR("Tronlong");
. p4 C- W* f; [) X9 pMODULE_LICENSE("GPL");$ p; O' ^; ~* u
; h& s6 K# X, m" Q) p5 ^% ` D |
|