|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 ]+ B, S* U: H& k6 ?
#include <linux/init.h>: U1 C3 L+ c# f
#include <linux/module.h>9 p5 Y; L$ w# x" U" s
#include <linux/kernel.h>
& Z! [0 n% k/ Y, A& b0 d0 A( F#include <linux/types.h>
5 @, {1 w" Q6 l; G# A5 f#include <linux/gpio.h>& K1 J8 n2 H U$ A9 i# ~+ k
#include <linux/leds.h>! Y a/ w' m" v: y, H
#include <linux/platform_device.h>: {% n3 ?1 [' l
9 _) u2 a: T' C. s#include <asm/mach-types.h>
: `$ E- |3 n& ^) G#include <asm/mach/arch.h>3 r! \' d: I9 x! N r( @
#include <mach/da8xx.h>: c0 ?" ^: \9 g5 P" C. [
#include <mach/mux.h>. i1 V. v' _* ?
& d3 t$ I8 l; |. y0 B#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 r0 ^* |6 T9 U& Y5 J3 r
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( T3 e i7 y: l1 K' a1 a2 J" Q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ M5 ?. Q* c8 \1 W# {
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
X+ N7 u: {- ]/ v* ]4 O; I4 K# H8 K/ C4 b2 B
/* assign the tl som board LED-GPIOs*/
) y$ q! W* ^ J- n: t& }static const short da850_evm_tl_user_led_pins[] = { k& {6 ^8 g, E6 u$ X) T
/* These pins are definition at <mach/mux.h> file */
" l0 G I) ~# V0 t! T DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, h) D' W N# m0 B( T
-1
1 l5 q* [1 f: h9 _, H};
# b2 y% O" p% o# A8 c5 ~; v/ h+ U: j+ f3 v& L9 ]% g0 H+ A
static struct gpio_led da850_evm_tl_leds[] = {
3 u1 p! l& P. @* D( \4 W2 ~ {
" k% R, {6 f. ^0 R/ d8 g. a .active_low = 0,; T- B9 j3 }8 l1 ?- x0 x
.gpio = DA850_USER_LED0,
# ]! I/ J9 h8 H, X4 x, T .name = "user_led0",! ?0 _2 i7 Q' @: V) Y2 h( t
.default_trigger = "default-on",+ c d1 E1 s# f1 m
},
# S2 U8 \1 |" h- W* t; n+ o3 T7 f; ? {
; g! z* h, F+ J' l; F .active_low = 0,
. w% P) H# ^, ^# } .gpio = DA850_USER_LED1,2 U; X1 Q Z: y, a* ]: q
.name = "user_led1",
/ t! X+ N$ `8 f1 n .default_trigger = "default-on",, @1 E5 h( ]: ~5 J: w2 H6 {
}, E0 m `* ^7 e4 M# S2 x, ~# n
{2 E# j# l/ j: K, o4 }; v! A' R
.active_low = 0,0 t$ p0 j3 X: p
.gpio = DA850_USER_LED2,
/ i) B7 P! v/ N .name = "user_led2",
* n! u; e8 L+ M" h* ^7 M .default_trigger = "default-on",2 {$ b9 X8 \$ |* W3 w" u
},$ [* y! Z; ^8 v) r/ b; [
{
3 B: X6 W3 z3 E7 e2 D9 E. M' E .active_low = 0,
: x! @# F* J/ m* U8 x+ k: r .gpio = DA850_USER_LED3, k, X# v, ~: {1 W2 _" ?
.name = "user_led3",7 z/ S0 `3 Y. J% @" U; O p
.default_trigger = "default-on",
- ~( D g8 Z C8 e I8 ? },
- R) S2 |# r; O' R% |3 D7 \: ~};
p7 c" j2 t$ m8 h/ V6 ^, ~! x( O4 n. x8 G
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 B8 J4 E5 U3 l) E! v
.leds = da850_evm_tl_leds,
3 I- q) }! h: g q. z5 P .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; ]* X# P# b& L8 v0 ?+ L7 Z};
8 Y, ]* j' e3 x7 w+ L0 a4 x' `% h9 a# p, [- W1 |! |
static void led_dev_release(struct device *dev)* y/ }5 w0 r; ]! Q# o1 W
{4 N% V3 D3 F( W; |2 S8 x0 P0 o7 g
};, S" B+ A' J6 C( \" c
6 ~; _ x7 _; L- X1 s9 |static struct platform_device da850_evm_tl_leds_device = {
- ?9 N' C8 T) y .name = "leds-gpio",$ ]" |+ \' @9 U3 @2 C6 n1 w' K
.id = 1,3 \& o( \, p7 a% f/ ~9 k3 x
.dev = {5 Q- q! s' v8 Y
.platform_data = &da850_evm_tl_leds_pdata,$ A9 R' ]+ ^+ d7 ^" ?
.release = led_dev_release,
* H& L4 A$ e5 m1 ~2 _ }
2 I* M; R) v. U G* ]* a* u5 l};
( V+ b3 x/ V P: x. R' D7 j) L, o' ?" Z8 u5 R/ a
static int __init led_platform_init(void)! U* v0 N+ y: ~8 ?+ S
{' n, r3 f% r# w1 d) T
int ret;
5 y$ U; A6 }3 L& B8 V#if 0
6 u0 _4 r+ U2 }5 e. Q. ^6 } ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* V& C* |5 ?: I' h& A. G- x- F
if (ret); h% ?5 y2 q$ i! I: ?
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ H$ c# W2 M$ m4 ~5 q
"%d\n", ret);
7 p8 K' M% `" `- q4 N/ t( U#endif
2 n6 l7 @7 D+ `4 [ ret = platform_device_register(&da850_evm_tl_leds_device);( H8 N- j3 T4 N) V) v. I G
if (ret)
, \" l, h* u; ]5 |8 V pr_warning("Could not register som GPIO expander LEDS");# E s3 \% j" R s* k# @7 v
else
: b/ f% H C8 F3 E% r printk(KERN_INFO "LED register sucessful!\n");
5 u+ p- Z( Y& } d6 ]+ `; v- ~# U0 s1 A
return ret;
, I p& y5 Y" J% B( X6 }}% W" r6 E- O9 }4 k
- `& w/ m% X; H; P6 k9 lstatic void __exit led_platform_exit(void)! [ A/ F" A3 ` n: F
{
* O: ~4 o% C6 z5 ?2 W: x. N9 T# C, q platform_device_unregister(&da850_evm_tl_leds_device);
0 ~9 L' I" D: u. x
& ]2 O) y1 X. |$ o: F printk(KERN_INFO "LED unregister!\n");
z$ C4 ]# v7 Z9 V% g- l}
2 K" y3 \! {9 d7 y5 O J1 E+ l/ i( k
module_init(led_platform_init);. s7 j6 U8 G6 U% Z
module_exit(led_platform_exit);
* l% g$ O2 Z1 m2 x# R
' V6 a: E- b! q& wMODULE_DESCRIPTION("Led platform driver");
3 t& d( v3 P+ K, V5 IMODULE_AUTHOR("Tronlong");& O- r6 j( I# w4 Y+ ~) Z
MODULE_LICENSE("GPL");; K2 b8 x+ x/ w' O
! w. p2 @: B4 u0 M |
|