|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, Z) z# F/ X% ^6 h
#include <linux/init.h>
8 R# U- H' g' j! t#include <linux/module.h>* C! O" ?# u% c5 G$ o
#include <linux/kernel.h>
' u v8 ]5 _6 a$ H, C: I#include <linux/types.h>
. t/ [$ y) t9 L) F' u$ v4 _#include <linux/gpio.h>
* Y( i% R3 R, L0 ~0 ~#include <linux/leds.h>" b/ ~ l9 j1 ~; S# C( h, F
#include <linux/platform_device.h>
, q! _. T& i( t
( V. H8 D. y, @4 Z& U2 n( M$ R" s: {#include <asm/mach-types.h>. I" i* H4 u7 u7 X L
#include <asm/mach/arch.h>
( ?" F+ T3 f! X' t: w- M f#include <mach/da8xx.h>/ E' C" E& B8 v; U" d2 ^! j; h
#include <mach/mux.h>! p6 }8 Z- x$ ] D
* m/ j! X) R$ F
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 }; [9 f# Y" J* ], V2 }! W9 ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 l) g$ H9 x- r8 C: Z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" L4 D- G2 ^% r0 ]; l#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
l# B6 C: v; G- I- q8 L0 W5 E7 _9 p J- e* x' s- B9 F' t4 T
/* assign the tl som board LED-GPIOs*/+ Z$ D) H# r# X9 F& L2 ^ L3 R. N
static const short da850_evm_tl_user_led_pins[] = {
3 ^% d! C, x! W: I* V/ e /* These pins are definition at <mach/mux.h> file */$ [" [( ?7 i& R2 W1 N
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, C% E, j1 o7 a" L' d( H* \! ^ -1
* Z7 V" ^- ~; n9 G1 i9 E! H4 }};" P& S$ |, ?# u/ f5 ^$ N6 h
% r& S8 c, s, w2 \& V
static struct gpio_led da850_evm_tl_leds[] = {, Y" R4 k. `1 S6 p! P
{5 e/ c8 ]: t/ a8 g, W
.active_low = 0,$ p. B! I9 l( {; `$ v# n
.gpio = DA850_USER_LED0,
4 [- U T- P; f% A7 x6 O t5 n .name = "user_led0",: ?+ f$ X; b k7 t6 U# ], S7 X4 [
.default_trigger = "default-on",$ a9 Q( }4 S. V
},/ k4 F+ _" Z7 v3 ~
{
" y- G0 x; t3 x, J .active_low = 0,
2 |' v( ~( R" i6 _: N .gpio = DA850_USER_LED1,
' }; E- c5 p8 o: y- x( K3 h6 G .name = "user_led1",1 f) F# q! Y* K% _( z8 E% y
.default_trigger = "default-on",
0 I/ o N& I' E- @: z% I, { }," c% n- P2 f5 Y3 A1 C
{! D* P9 h. _7 |9 T
.active_low = 0,: ]- B' \( H3 j1 ^0 }
.gpio = DA850_USER_LED2,8 W. A; \( V; ]# F
.name = "user_led2",
+ @6 H6 r3 O1 v% U9 ?& `3 ^" a1 t7 V .default_trigger = "default-on",+ C" U. d& |) j7 L) o% R" {6 G
},
' M/ U; l9 n1 I: P3 ^ {
5 z) l1 a& d, T# H9 J- g .active_low = 0,3 Y3 i4 H, ~0 E! G/ ]: Z
.gpio = DA850_USER_LED3,
' t4 f( R+ x: J .name = "user_led3",
L: Z4 e; e. g/ S .default_trigger = "default-on",' I! B$ \0 e5 U
},( d6 ~$ z$ r$ O' s
};! B. M4 A/ D* X( E+ ^
. D' N& [1 c; q- t
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 q8 S. P8 X2 P* T: V8 G .leds = da850_evm_tl_leds,
3 v1 m& t( l$ A* e .num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 F2 l& x" H4 ^& j) ~: e8 Q
};
( P- w) U7 o7 z( D! X: \! i5 \! b. m* [0 C- `; K
static void led_dev_release(struct device *dev)
# h0 |) k# J S$ r3 l/ n* C{- \7 N2 r9 T. m7 o% n8 E% F2 H2 q' z
};; C( a, B- P* b: ]1 x3 n, M n
( q& z4 y) V0 D' W" b0 y9 A
static struct platform_device da850_evm_tl_leds_device = {* I/ w8 |8 O$ X w0 l2 V
.name = "leds-gpio",) J) o6 [( ^% D/ H L
.id = 1,3 `. a7 T1 S; W g/ ^' H1 U/ n4 }8 V
.dev = {
8 u2 c$ {8 B0 ~6 d* w ^ .platform_data = &da850_evm_tl_leds_pdata,5 j Y5 b7 o# i4 Z3 ]4 \
.release = led_dev_release,2 g# N. i: j" E( j4 M
}
) e* v: s5 y9 L9 ^};
; P; {: ~8 z8 T% c S4 F0 k9 L4 D+ z4 {! H
static int __init led_platform_init(void)
8 Y5 A% [. c+ a9 j/ }, e{
+ G7 P- v9 {: y/ [- W& i) w" { int ret;/ Z E$ V! \9 O. V* q* L) }' E% r$ w
#if 0. v6 D* b2 M( G2 A
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);$ L' P8 j" @, N( d6 t3 z
if (ret)* j, x" j5 w) ^. M$ }, ]
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 M( f' @5 b! l/ N3 t% x "%d\n", ret);
# w2 S5 d4 E& X2 f2 T1 K#endif
) f0 V1 k% I! g$ h0 y ret = platform_device_register(&da850_evm_tl_leds_device);
. e' Y$ w; c- `: N" L5 {' } if (ret)
" J; B: M7 F" c pr_warning("Could not register som GPIO expander LEDS");
! R. i# U! T4 I1 H) \ else6 i* n% |( A& Z* t- h
printk(KERN_INFO "LED register sucessful!\n");3 I% ?! t4 i( B7 v5 U3 J
; u0 M. e* H! u return ret;
, T% n7 V% _$ z/ o}
( b" y* Y" A8 D6 A8 Y! b2 c' `5 a n/ N/ O/ M( M
static void __exit led_platform_exit(void)
5 e: {9 M( Y2 P) Z+ P4 }1 b{3 F n( h+ }6 W( O4 N6 b% V! \
platform_device_unregister(&da850_evm_tl_leds_device);% T6 Q m y/ R0 {
E! S& Q6 t% ~7 N& }* X3 n1 A/ o8 c
printk(KERN_INFO "LED unregister!\n");* ?* Y: W2 _: t {# u% `
}
& ?; \( y b# A& d2 R8 }2 G a2 w, ]/ x- B. {8 c2 I# A
module_init(led_platform_init);; ?1 C' Y2 G" t" n& F
module_exit(led_platform_exit);
& T0 H A4 F6 m- j: U4 f, \7 C' u( `
MODULE_DESCRIPTION("Led platform driver");
2 v h: Q( W& d' N5 x% T. ^' kMODULE_AUTHOR("Tronlong");
8 a2 G V9 K' g/ zMODULE_LICENSE("GPL");
6 @: O/ V6 |" ]* U; G
. |; | l2 i# d |
|