|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 a7 J1 [3 m! T# L8 D3 b& C; N
#include <linux/init.h>
! N- X" `5 m7 d. ^#include <linux/module.h>/ _4 X. M9 L4 H
#include <linux/kernel.h>
" {0 c+ y) L: K3 Y) U#include <linux/types.h>
8 ], P4 c. T/ n8 ]9 a#include <linux/gpio.h>
* ]6 U& r9 X4 L5 R: m2 m#include <linux/leds.h>
+ S- i* ?! G! E" s* v" I* `#include <linux/platform_device.h>/ `$ K4 k8 n' Q3 r
7 e. g! m6 D. \2 W: F! h1 T( O
#include <asm/mach-types.h>; n# W" K# ] |- u* L- N
#include <asm/mach/arch.h>5 A# |- x7 {. s A5 A! `1 I
#include <mach/da8xx.h>' M7 V3 T, I. z; y" c+ ^" q* B" M
#include <mach/mux.h>4 y% b$ c0 M3 X9 f
; j% q. t: g: G/ f( D5 y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- S3 K/ m5 g# y5 _+ X2 `0 Y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) n0 O8 Z3 j! ]9 X& }
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ \) Z9 e) q! S+ A+ Q2 {
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( F7 i% {: ^/ g; e9 a5 a+ L( s5 C$ W8 o0 X1 z6 `
/* assign the tl som board LED-GPIOs*/- O% H3 D# L. |1 E# s" {
static const short da850_evm_tl_user_led_pins[] = {9 }! c, y# f; ?; e* S% w
/* These pins are definition at <mach/mux.h> file */
* O% o3 v) @- c+ n6 ] DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; z( O+ l1 H, `& V/ u [8 F* h' v -1- c* e, ~1 T/ ~0 N, e2 d! }( R( ^
};3 i/ ?- e0 ]% u" A
- O2 O9 H" F" i* T
static struct gpio_led da850_evm_tl_leds[] = {' y( b2 a+ Q: K+ j2 q& V* B
{9 w6 `9 q% C, R
.active_low = 0,7 K/ h4 }2 k: Q' a8 t
.gpio = DA850_USER_LED0,
% o- v" }, k9 }2 W: v% V- H! k V .name = "user_led0",
5 W0 }6 C, h9 T4 T, t/ E9 d3 s .default_trigger = "default-on",
: j& y: T4 y* O: t _ },
, }. ]! n: Y3 i% h {) c j K1 j" A
.active_low = 0,1 R0 K W' s# d9 n1 ]! X
.gpio = DA850_USER_LED1,
7 o0 o( O7 V( o+ G6 r .name = "user_led1",
( p/ W( A& q( w. t1 b1 F) P- ? .default_trigger = "default-on",
3 D% t; n6 Y% S2 O& `3 ^ },
( ?4 ^, ^: P _8 T( u1 P9 u {
, g( M, h3 O* Z' k# f .active_low = 0,
$ U- a, z% |% E) S. ^! Q .gpio = DA850_USER_LED2,
) L- @9 z& k: U+ n2 z" @7 t: g& l, a .name = "user_led2",2 _$ f7 I# Z' E. N, n
.default_trigger = "default-on",( P, W" R' n3 a' p$ ~! h' H
},7 m* X( |4 g2 [0 z+ `# n
{3 Y4 v" ]' D8 L! F( T3 ]7 t
.active_low = 0,
. \7 | `0 ^5 S6 V5 e# l .gpio = DA850_USER_LED3,
+ s, S0 a( l2 O% a ^1 C2 Y. B4 V .name = "user_led3",$ a [0 b5 Q& [. n$ x5 k
.default_trigger = "default-on",
+ m7 g# m7 p, `# S+ c },! t8 I! U r4 r: S0 k
};3 t. H$ v0 b1 F b6 \% r+ B* A; n2 S
5 z# Y5 p# G9 J: F) J2 p) r
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% @7 t$ [1 i7 H% B4 I4 h2 T
.leds = da850_evm_tl_leds,7 I2 @; C2 M4 G8 }. `# S3 H# g. b1 x
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& H0 h' {3 r+ A* U3 j
};
+ t. x0 g: r; D6 c, e
. J' c- w) W: ]) G9 {9 hstatic void led_dev_release(struct device *dev)3 w9 F( x" \( V5 \' n% i
{; d$ v! T$ T: c/ z' g
};- N4 F" C2 K6 H! x
3 p, }' t* S* u& Sstatic struct platform_device da850_evm_tl_leds_device = {
* y( d+ S: C6 F+ x. _ .name = "leds-gpio",& `6 x8 D. v. P2 i9 C
.id = 1,) ~! e/ X" _& d- ]
.dev = {; W# |0 Z) T7 k0 |7 g0 O0 W
.platform_data = &da850_evm_tl_leds_pdata,8 R/ T' {8 M( l" t( t
.release = led_dev_release,
" z; r" N8 x& F: l- k }
# J2 O- P3 K% w! }: I% W3 `};+ d& ]. `& b$ Y. [
: o- {# R& |. q( R* J$ E
static int __init led_platform_init(void)
& k+ ~; V. K" o{4 y5 y1 V9 o2 ^! `
int ret;
1 g+ A& n' t8 L/ C9 J#if 02 C" h) Y4 k. [5 F) H- `
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. w( @6 h# Z" X, R a4 H' m if (ret)
* t/ j9 Y3 l5 H. v pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 q( j9 v- D1 z
"%d\n", ret);/ R* Q; b" Q# c
#endif$ Q$ o8 `- N* O: ~, J& b* T3 n( c
ret = platform_device_register(&da850_evm_tl_leds_device);4 o/ n& Y$ z$ p( o0 ? x7 b$ A
if (ret)
% a, J5 [0 `- v, g pr_warning("Could not register som GPIO expander LEDS");
6 h8 a! v Y! ?; Q8 [ else
8 B5 L: o' @, A printk(KERN_INFO "LED register sucessful!\n");
# E6 t( h$ a1 Y' X: y+ N
; i9 M9 x2 x4 b3 x% S return ret;$ Y9 ]- d! v( S4 z2 J o
}
8 Z9 ~3 L6 `# a2 D: a/ l* y$ c% u: R2 ~
static void __exit led_platform_exit(void)! W% a5 P4 _7 I# k0 p
{
6 D1 ^$ R& v4 S2 T' O3 ~ platform_device_unregister(&da850_evm_tl_leds_device);
) \ G+ e9 m) U: F7 t1 r5 S! F/ j6 Y& D+ c% w, {
printk(KERN_INFO "LED unregister!\n");
- I( \1 T4 d5 W. A# t}: X1 q% Q$ s, U8 q0 [! ?6 [
: \) z6 Q" G; E5 o3 A/ M* V; v
module_init(led_platform_init);) G, F+ Z2 p- O9 a0 L! n, L
module_exit(led_platform_exit);
# z' m' J+ W- `+ {- S! h
# g _8 T0 T! U( i0 u5 E; vMODULE_DESCRIPTION("Led platform driver");
0 d6 _3 W! U3 \- bMODULE_AUTHOR("Tronlong");9 J0 V# [ E9 W
MODULE_LICENSE("GPL");
0 a `8 K$ _& X% |% R7 u
/ @5 P O; E* }& l; f, Z$ c4 V |
|