|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, f4 j8 p, S8 u8 t
#include <linux/init.h>
* N- S! |6 [* r9 `- ?$ y' ]7 \& G#include <linux/module.h>* Y5 m$ u+ |! M; A
#include <linux/kernel.h>- R+ G _9 k/ ]0 i& @ q8 q6 `
#include <linux/types.h>% j* @: V+ l* c- V* L. q" Y
#include <linux/gpio.h>
- x0 r/ Q" H1 n: E* m( k* m#include <linux/leds.h>/ V! U7 h( b% y
#include <linux/platform_device.h>
. F# U* { X, p
, v2 d1 ?3 a" D2 K# G ^- ]#include <asm/mach-types.h>$ X& [+ ]' M$ `3 k0 E
#include <asm/mach/arch.h>4 H4 u: \8 e" y. K$ F) U
#include <mach/da8xx.h>
# q z4 Z# ]5 t- d#include <mach/mux.h>
' @. V, u7 I: Z1 _+ Y* T8 X, a
& X+ J, B$ W- T5 O% U) v#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 ~2 }: ^# y8 I+ i! s. _0 B' n. O
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' y# x+ r: D* H8 I3 I4 ~+ e
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. \3 l2 F7 @$ Q3 V#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 ~" P$ U$ W# o, g5 n }; A# G' E$ F. B: b* S- m! \5 J
/* assign the tl som board LED-GPIOs*/
7 J2 |, s6 f; @" Nstatic const short da850_evm_tl_user_led_pins[] = {
. q. e3 u* Z! y! m4 y /* These pins are definition at <mach/mux.h> file */
5 V: [- _( K7 g2 n! E, |+ [ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- [# {9 T) Q: X: B5 g& R3 L
-1 m; T5 R6 c5 w/ g
};. R# D9 u) R$ v2 f$ K, x! t: a
) c0 |$ X& K/ n; e# k! L; X3 Mstatic struct gpio_led da850_evm_tl_leds[] = {
& }; @1 J# F) R! ] {2 _0 o6 A5 M1 ^8 Z/ O
.active_low = 0,8 R1 L" a9 n9 f+ Z% j
.gpio = DA850_USER_LED0,- \( K+ W6 k0 n& a) g. l$ w
.name = "user_led0",
) G3 p2 r9 o" ^; ` .default_trigger = "default-on",8 H9 c9 h4 J& x- D
},3 w" ]7 @0 T9 ]
{
( |- s* s8 u: ?% y e .active_low = 0, n- A) g( j, x7 w+ P3 ]: D3 Y& z
.gpio = DA850_USER_LED1,* \6 m0 {2 t8 N9 i
.name = "user_led1",& I8 j6 f O9 K$ T2 ?; n/ ?
.default_trigger = "default-on",4 V) {8 Z; _+ g+ I$ F8 \8 j% P
},
& I9 F# ^% t) e; u* v) p O; l4 z2 e {
& ]0 ^* R. a5 w5 I .active_low = 0,1 Z8 }& c- S6 F& [" X* n$ b
.gpio = DA850_USER_LED2,
# y; ?4 @, ~2 R7 [ .name = "user_led2",
6 T8 Y" S3 r, R0 x `: V- B5 [, R .default_trigger = "default-on",
7 N [# y# s! l },$ L" B: u: T/ b6 c: U5 O- d2 u# M
{
# Z6 \. T/ h! z" O: X .active_low = 0,
# P$ Q& x3 C: F4 ]" z .gpio = DA850_USER_LED3,
8 j. S3 @ H" K0 g2 d8 q" @ .name = "user_led3",
" [6 s% T( D: ^8 B8 F .default_trigger = "default-on",
4 O$ {# @6 b6 g( I+ H },/ m. C$ O7 F2 k) x" U! E
};
9 C/ |$ y7 a3 j" F9 O |6 t# H8 W2 g [% ]: o2 p1 F
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" E# e3 {( t6 `) L .leds = da850_evm_tl_leds,3 ?2 P* }5 {: F/ y6 {2 V1 l
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! X. s; c5 I- x" n};0 d, ~2 X+ `% i7 c
# _' ] R, m; L8 g: V
static void led_dev_release(struct device *dev)
: p" ?" h0 h$ _{! ?" F7 r5 w% e. ^" w1 f9 f
};
, `0 M; ?" g: H! `9 G+ l& ^/ l
8 X% p+ U" S& e1 Q* y$ F: Ustatic struct platform_device da850_evm_tl_leds_device = {
% d4 ?% v ^/ w. | .name = "leds-gpio"," |% _; }0 v! [7 a9 m
.id = 1,
: \! a& x& e7 L& } .dev = {8 X* c" z: F0 v l, |6 ^: W
.platform_data = &da850_evm_tl_leds_pdata,
( o) P5 ]& Q% x .release = led_dev_release,
& |0 _' U1 Y! j) z, |5 w0 C- b8 v7 N3 ` }' P8 U8 ]8 D6 ^ Q& R+ i
};+ i y; x( {7 r
# C( y, |2 c9 J4 x! `; q1 ~static int __init led_platform_init(void)' f: h1 j2 i( `* I
{" c- K* I! x" S5 V6 Z. ?
int ret;; t- d: l B' [# P; F
#if 0& z6 d& Z) C4 K* D5 m
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' N4 E' p( `7 U0 i1 S1 P
if (ret)* a0 I) X' v V0 P
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
G0 Z2 L, P/ l "%d\n", ret);% s2 T+ n1 M9 G) W% v$ ~/ n
#endif. N, L) D- e( s6 m: [
ret = platform_device_register(&da850_evm_tl_leds_device);3 ?- a+ W# C; H9 X* M+ G2 n4 |) A
if (ret)( B. B$ n2 e! E5 A' Q9 @
pr_warning("Could not register som GPIO expander LEDS");
2 [: G2 \1 |- [) ?, ~: u0 I% H else
$ N/ W) Z3 I$ \: C printk(KERN_INFO "LED register sucessful!\n");: p7 F% ?: x7 k# ?9 _
5 F' |6 k) i v8 z7 w# D9 L
return ret;
8 H, ~$ p# P$ J. Y}4 B. }" f$ R% j/ M [! s$ V
2 @9 M4 Z w, F8 K$ {
static void __exit led_platform_exit(void)3 F, W3 k6 M3 h: K
{1 h( c2 `. v w+ r' `$ |
platform_device_unregister(&da850_evm_tl_leds_device);
4 T' x: M5 h1 b4 x. A$ O4 U4 ]* v
% a: X6 v- K o" {) Q0 {& \ printk(KERN_INFO "LED unregister!\n");3 q, f6 Z0 O3 x( Y O7 G
}
$ d- V8 X% K/ P8 H- q2 Y X7 c
1 R! \) c; J) b$ L9 `6 ?- c, Pmodule_init(led_platform_init);7 b4 q$ A2 c( c
module_exit(led_platform_exit);& _0 v1 Z, P) h$ V# M
& L7 N9 y% `: T k' G# nMODULE_DESCRIPTION("Led platform driver");8 K7 \" G$ A* ^& W
MODULE_AUTHOR("Tronlong");
* S" A! u. Q1 ?1 ]1 p1 L8 {MODULE_LICENSE("GPL");& P, f) X. H1 P) m4 f
" [$ B7 ] p) ~; G( a, z+ U$ f
|
|