|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( K6 g, k& k% Q/ k e3 A' n5 s9 D
#include <linux/init.h>6 r# m1 u& \6 o" [3 C
#include <linux/module.h>7 }) ` D$ e' K8 {
#include <linux/kernel.h>
. D& z9 n+ h( q& E2 }" |#include <linux/types.h>
/ X) a7 p8 U) [0 Y2 M4 V2 E ?+ B#include <linux/gpio.h>
5 K: d% T+ ~. i. `- `) l#include <linux/leds.h>" V( X& S; X: S. O) L3 _
#include <linux/platform_device.h>
+ T) ?4 r7 C% [; C6 q$ C& J) Q0 z. R
#include <asm/mach-types.h>
9 p* R+ K h; b& @9 c8 w9 F#include <asm/mach/arch.h>* t8 w/ i+ h5 O
#include <mach/da8xx.h>
% o4 J: K& l' h8 D6 w#include <mach/mux.h>3 [9 i& K$ Q; T6 v
6 |' Y9 U3 l; @0 f3 z( w- x
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" S, h) |% X7 }# |. H4 R#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 y3 N: V& V) R" I2 i _% `. N, i
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' g( w; `4 [. x7 `$ b#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); t' t% T; W& Q$ Q, K0 D
' `; J9 K& a7 f, ]! K' ~! O* W/* assign the tl som board LED-GPIOs*/
7 H$ d/ T9 ]: H. c; v5 m( T$ |static const short da850_evm_tl_user_led_pins[] = {
5 b- ]( _- P5 X* {: h /* These pins are definition at <mach/mux.h> file */
$ G! y- ^% P V DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,& v8 M ]; Q& M6 }0 {8 T6 c! U
-18 i" D) ~, ~8 d, t! T* y% t1 l1 I. T
};
# i! V% [$ {3 P/ Q! d8 _
8 V u: n/ X! s4 o3 J1 k8 pstatic struct gpio_led da850_evm_tl_leds[] = {. ~8 y# u0 ?" k0 J8 g/ Q( p
{1 q/ c$ f( b, \
.active_low = 0,9 _& c0 i c/ t: Y
.gpio = DA850_USER_LED0,* v/ J, ]% U, _6 n5 _
.name = "user_led0",3 P! e# J* U! v
.default_trigger = "default-on",
1 Y9 e/ v1 k3 S' D- y6 S' F& v8 G },# c/ X) ?3 |! e
{/ ~ d. q r8 C" x! V
.active_low = 0,! T$ V6 `! r K$ t
.gpio = DA850_USER_LED1,7 I/ G& N- P- W6 M! E- T
.name = "user_led1",* B& X( O7 y0 e. p. C
.default_trigger = "default-on",
5 |* C# s7 }0 i6 K, v },% ?) K) G/ G, b3 J8 w3 F2 I9 l
{
% R' s% s+ b+ \& u! Q .active_low = 0,' D+ ~4 M7 j: p' }. u3 Y
.gpio = DA850_USER_LED2," ]' l, @' w( f) [9 j ?
.name = "user_led2",
5 W z& r8 i* ?! D# b9 X, W) z .default_trigger = "default-on",
% m% e4 E/ ~+ F; v7 G% R) l- ^ },' d. f1 w6 o: Q C# f
{
( ?- m+ c; r! N3 J H .active_low = 0,
: z& B0 a6 D* G .gpio = DA850_USER_LED3,
# Q' J Q+ U: N3 x# W9 I8 y .name = "user_led3",
8 u* Q( C( ?5 u: Z' ? .default_trigger = "default-on",5 r: q( V4 k, q4 D$ C3 X
},
/ R# c& L+ B. F4 {# c/ X};
# w2 A7 _2 D2 T7 P+ p/ i& H' k, Z5 W! q% Q# _
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: g `- ?6 ]" S- P/ x3 K5 j .leds = da850_evm_tl_leds,
+ b0 Y+ p& _" E$ g3 h: [9 V( l .num_leds = ARRAY_SIZE(da850_evm_tl_leds),) K! l7 n1 u$ `" C, w8 t
};
8 Q5 `% W* B5 f1 G
: l n5 q" f1 E# o7 D! ^! D: astatic void led_dev_release(struct device *dev)$ D1 O% [! F. h9 b' b
{
6 l, h9 W! [+ @3 l, f1 E};
. I( ?/ h$ _' W* n" ^. o
( V: k; g! w5 Q2 c( vstatic struct platform_device da850_evm_tl_leds_device = {- x K( @0 D( B) e' O
.name = "leds-gpio",1 v% O3 Z, W: Z3 Y0 P7 O8 y
.id = 1,: c, u! [( Y( Q5 v8 s/ y
.dev = { R% {5 b- s# F; j' t. U5 u
.platform_data = &da850_evm_tl_leds_pdata,
; B& e, g, P: y8 h5 b .release = led_dev_release,
. f* j, v2 Q& r: m2 U% n+ L; Q9 D }: o* \- u* w0 h! @3 L
};/ f0 L1 C' U5 ]8 ]( ?7 p# G
}6 c/ n- Q' G" Y& ]% d
static int __init led_platform_init(void)
& P, i7 [2 t( v( E' c3 Q; b- D{% T7 l% V5 v) _
int ret;! |( Y' C; M# W2 y) P
#if 0
7 r; j9 ?# ~0 |8 C' w ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 n& m' ^5 G" H# t2 [# f
if (ret)/ {# {7 G; I, \/ j% E
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 R2 ~# k5 {% B9 C2 N "%d\n", ret);
+ S8 B- v, f8 _5 c#endif& k" [) W4 }9 o& D- u
ret = platform_device_register(&da850_evm_tl_leds_device);, Y* X0 U( y+ O
if (ret)
: _. O Z- q# [" w# w+ u' Q% c5 T/ Y pr_warning("Could not register som GPIO expander LEDS");7 v" z# H: z% O; m
else5 _6 J0 q" A% w# C1 \
printk(KERN_INFO "LED register sucessful!\n");
9 j7 Y# }3 G8 j0 R9 Y) G
u8 |0 }- f# E; o E9 A- t4 K! v return ret;$ [3 X7 V+ X5 e: u
}
. `$ S+ Y. R% Q7 W: J `0 k! `* l2 J; J$ K9 o, e% u! W
static void __exit led_platform_exit(void)- @3 g0 Q& ?- u8 b: d3 E
{
9 h' q1 H6 @2 R" m3 J6 R0 Q platform_device_unregister(&da850_evm_tl_leds_device);/ n3 C: u. I+ {: A) ^
5 |3 a. R' `: a* a2 O' s+ y printk(KERN_INFO "LED unregister!\n");
+ }) R/ W( n6 f! C9 N# _}
, S5 {$ M$ B: D$ T' y7 C4 K6 ?7 d# W) y
module_init(led_platform_init);$ W9 J3 G$ o* x
module_exit(led_platform_exit);
- |+ H1 S: a9 N
; m% l0 |2 V Z% n: Z1 T' ZMODULE_DESCRIPTION("Led platform driver");/ a4 c0 q. u7 ]! {; Y
MODULE_AUTHOR("Tronlong");
6 m$ E+ M$ O) f% E. o! [MODULE_LICENSE("GPL");
* h# ^, A% J5 J H, E9 v- T3 v
J/ {: h* z) {" W& x |
|