|
求大神给下面的程序做注解,请稍详细些,谢谢。! C7 G7 D4 v2 _2 R5 y7 l# C
#include <linux/init.h>
" _4 y8 _' J; t$ c4 K1 K1 G#include <linux/module.h>
9 _; w* K8 W6 V$ ]! e. L4 v! }, E: u#include <linux/kernel.h>
( c6 Q8 p9 D/ P" Y#include <linux/types.h>
9 V5 s3 W8 I5 m+ j/ j#include <linux/gpio.h>
9 T$ B* H! B# d) }& H7 R; H#include <linux/leds.h>
& Q5 r: }. R9 {1 K Y/ ~$ p4 _#include <linux/platform_device.h>6 h) {* u" {: x; y% F
' J- |/ d3 m' l#include <asm/mach-types.h>
6 I0 D/ g$ l3 T5 N6 x" K+ Z#include <asm/mach/arch.h>- o! B( _0 D2 \' D
#include <mach/da8xx.h>
2 v% R8 w2 A+ n' T# z( Z#include <mach/mux.h>' C% C/ u l1 h m1 |
" c( M1 K9 {6 m% E, h
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* c. O e- k3 F: H
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
q. S' e" r# ?3 M' r#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ z5 X: U8 w& p0 p* v! t% U6 s% j#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 ]- M" k; i" N
3 i Q! _! ]( }# p9 ]/* assign the tl som board LED-GPIOs*/
3 L+ ~ b2 J8 _* z. K- |static const short da850_evm_tl_user_led_pins[] = {
$ f5 [6 h. n4 J4 z8 f /* These pins are definition at <mach/mux.h> file */ G! I2 d5 B" A9 n1 M
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' w, _$ S( r: p3 ?% D -1
; L* X' X8 Q k! c P! V: W( ^* M% }};* ~0 |$ O7 J9 g' u, L( ?! o
9 Y# O# f' j' Z( v; ustatic struct gpio_led da850_evm_tl_leds[] = {
) |7 s" w6 d7 c- j0 U2 Q9 Y {* z+ ?9 K- ~, |3 k
.active_low = 0,9 D5 U/ E2 _) O* \ h, X1 N; `
.gpio = DA850_USER_LED0,
1 O8 E7 O' W( y {: m) Y .name = "user_led0",
( Z3 B9 O6 A$ a3 G2 q! ~" e .default_trigger = "default-on",
: T+ \; V/ r1 P( }1 _ },9 j0 N5 d' I5 h8 h
{& N( d/ W$ H9 T* G- O0 F
.active_low = 0,5 _" P6 N! ]# ^
.gpio = DA850_USER_LED1,3 q$ |: b% P* j6 m* ]
.name = "user_led1",9 i* l( [" M* y7 u6 Y, O8 t" ?
.default_trigger = "default-on",
. H- G# P' @8 `# {2 v+ B },! G2 j0 q% ?4 C5 E" D0 f P( {8 {: t
{
X, a3 o* Y2 x9 |0 [9 o .active_low = 0,% T1 b% ?, j$ \ D8 _
.gpio = DA850_USER_LED2,' U8 ]% k- ?$ i) k8 X4 U ^
.name = "user_led2",& G1 W) j; U2 j. j0 p
.default_trigger = "default-on",7 }$ g! s3 @! d$ N
},# n& G/ Y4 r7 A0 K" w) l
{. C/ \- q1 P j# v! B1 G7 L
.active_low = 0,4 `+ ^2 _4 W# Q8 s4 k; Y5 S
.gpio = DA850_USER_LED3,; `7 `! B- N8 M$ {# W3 [
.name = "user_led3",
$ K0 X" D3 f) H& x+ Z) u .default_trigger = "default-on",8 @ o! d! N' k6 l) }/ y" R
},* a( p# P2 v: g, J+ L) A m7 u3 f
};2 f( U$ c" R. q0 n7 w; s
6 h5 R& I0 m; |; p# Kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, U1 J2 |* p. n. ]7 ~7 D
.leds = da850_evm_tl_leds,
# \% e3 Q8 @. I7 n .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 Q" ?8 {/ z4 h$ ^: l};
5 A! u, J( r2 T. W# V0 q, B' L( g- K& q0 ^( x y4 ~+ b* k
static void led_dev_release(struct device *dev)
0 u1 j8 j- ^3 \: |) u: [! x( L{
5 Z e6 w" i( X8 [( ?" v5 }3 }};% u5 R9 j) p2 r- }! v# L
f; Z4 K0 ]# S3 `static struct platform_device da850_evm_tl_leds_device = {( [% a8 X: h; E+ ^& E+ I4 u; {0 O
.name = "leds-gpio",8 Y/ A# P4 n( N8 g0 o+ V
.id = 1,
6 A! g8 T1 a; \0 z p .dev = {; N2 U! `- E4 J0 \$ [( S* W
.platform_data = &da850_evm_tl_leds_pdata,
" ~$ `9 u1 f4 i; B J% \ .release = led_dev_release,
+ x* i& ^8 a/ v b; ~! ?/ H/ ] }: e: l! H. l/ F" b, q b
};
" f. `9 ]) o; u4 A8 ^
* ^4 Z6 M+ w8 y. Y* Kstatic int __init led_platform_init(void)
" [' @) B0 S% w- [8 }3 }- A{ u6 O- s* I6 V) B$ z5 P/ {
int ret;
! ?8 F- A. l) v6 o4 l#if 0# Y* P* _5 B0 l0 w
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& ?4 |0 ?4 m$ } if (ret)2 z5 P7 |4 ~$ m
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 t, H; h7 |# b- l: I) O "%d\n", ret);
* @/ K: I2 d, x. Y+ v+ `#endif: o/ s: U3 T/ s1 p$ Z( p# F# Y
ret = platform_device_register(&da850_evm_tl_leds_device);
$ m3 ?( ]$ C, f/ e/ h if (ret)7 {2 N' e, R; y3 |
pr_warning("Could not register som GPIO expander LEDS");8 e/ h* u: ^5 E
else
7 H& p9 `$ q H1 a printk(KERN_INFO "LED register sucessful!\n");
3 r; x9 `7 C# U/ y* l% N/ y6 h: P) ^" g/ ?6 J- F- r+ d8 Z( ~
return ret;6 u& c0 e5 c- f8 s- g! _# A. d
}
, L7 `2 H; d2 M
( v1 y; P. L# W# p, J1 e8 tstatic void __exit led_platform_exit(void)# N- q( K l- L) C
{7 F. K) u; m# a0 R* [' ]! f9 G
platform_device_unregister(&da850_evm_tl_leds_device);& C2 y+ \. v$ f1 o: N/ \. } E7 J, R. b
# g+ O# ^ `$ b1 M! E' g printk(KERN_INFO "LED unregister!\n");
8 L* {& I; S n}" H+ q+ x3 h1 d) z4 j
' W: q& |. i6 o5 n! j( c5 P( J6 E
module_init(led_platform_init);: U& P* O( T9 E4 K9 F! W2 l! m
module_exit(led_platform_exit);
! `; u) d, G& c" h; I8 f8 ~ c( |' O' j6 [+ Z
MODULE_DESCRIPTION("Led platform driver");( `) c8 @" y' {, a! n
MODULE_AUTHOR("Tronlong");
; F9 G! ~5 b" v: ^& `* ]$ G, rMODULE_LICENSE("GPL");
4 F- b0 c6 B0 Y2 G. ~: O. B4 k# V4 s# ^( D( S
|
|