|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 M- h) C: U8 Y* k: z* D1 X7 o#include <linux/init.h>; h# j0 Z. r6 I7 D
#include <linux/module.h>1 u" K6 h. Z* K
#include <linux/kernel.h>4 W) Y4 V8 e I- S+ s! F, W
#include <linux/types.h>7 V' V6 T6 L7 Q, Z! G; _
#include <linux/gpio.h>
3 ]' P" c9 [& Z5 G. E- l4 X; g6 F#include <linux/leds.h>
9 F I4 t% v) u+ p#include <linux/platform_device.h>
; Y. q1 Q! D" P) P2 ?6 y# C9 p* x1 L) Z
#include <asm/mach-types.h>) b; w0 V. u7 h( {/ f
#include <asm/mach/arch.h>
5 `$ `3 H7 Q- j ?. a#include <mach/da8xx.h># V" E2 ]0 f% `2 @
#include <mach/mux.h>) a D6 |& z% |) ?4 c1 W: _3 H
4 i3 {0 f! I- R+ r0 l
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 c/ |7 ~7 v) E& N
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ F7 ?3 M+ L- k$ Z+ v# a U
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( d& l; I; ?# i# [
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ o, a' E! a: u( c) n& h( h5 u5 `$ S `7 T
/* assign the tl som board LED-GPIOs*/
, f+ h; R$ E# j6 e0 H, f' _2 Z- Pstatic const short da850_evm_tl_user_led_pins[] = {
! k8 j; z% Y4 z8 B1 b. N. W" G" X /* These pins are definition at <mach/mux.h> file */
6 Q4 {, c$ C! s) ^: w! W/ e DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# k9 S0 P; A' W -1
% ?/ d9 R, _ l. @: p};
B. D8 _$ i! Q0 v/ d, _4 R0 S: Q A
static struct gpio_led da850_evm_tl_leds[] = {
+ _( r# q0 a" X8 b+ Q4 L. K {' a+ P/ }+ u% `5 l4 B, ^' Q
.active_low = 0,% h5 h( B2 D: m; z9 i4 ^# c
.gpio = DA850_USER_LED0,3 X& m7 S) M$ M+ T8 c: {' a
.name = "user_led0",
7 ]; B5 m" W N+ V+ y0 P( V6 B6 g4 U% q .default_trigger = "default-on",
: G0 H7 ~3 R) h+ X( n* d3 u4 H: Y },
& n! q, F2 v* e S' G {
8 }) `( I- K; J" q .active_low = 0,4 }+ u* m6 I" a* p4 _1 Y8 ^
.gpio = DA850_USER_LED1,+ s% [6 G6 w2 X+ v/ T: h4 R
.name = "user_led1",
+ w0 T5 Z- D! v: J' w .default_trigger = "default-on",
6 z# r4 p+ o! m. I! h1 d7 e },
( K6 d" e& @: j {, ?: ?& X. o: j; \5 \8 i" Y2 t
.active_low = 0,
: g3 l4 b, ~6 y9 a! S5 M! k5 l* b .gpio = DA850_USER_LED2,6 k1 }' V3 |) {7 f5 h
.name = "user_led2",. {! z1 J- i; V& K
.default_trigger = "default-on",
! ?3 {% \) _2 e7 n' _9 B },& C% s5 ]) O5 Q5 s8 q7 y
{
2 V1 [* V' V3 N( }1 ~2 p .active_low = 0,) @, J) V; r& d% v) D0 f0 l+ W
.gpio = DA850_USER_LED3,) Z* E9 L1 ]& l& X) G9 p
.name = "user_led3",
) @* x* M" k) s+ {$ ^6 K; j .default_trigger = "default-on",
- J, `& I8 _3 `8 z },
& q5 D3 A% t& _0 u2 ^$ s. p};
+ e; Q; c9 U8 ]3 d! X
* ?6 c4 O& w O7 e: B$ sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. c: ~: l5 r: K6 S d .leds = da850_evm_tl_leds, F# D! _8 Q. M1 N( P
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( |) W) ^; d! o: }3 g8 N9 x+ ]};: _* s m, k: J
8 \4 K& p; X, X9 w
static void led_dev_release(struct device *dev)
5 P: H. O* @: R3 V- |: D' N{$ y* m% I- h% |7 h; q3 v3 Q
};
7 [! D7 q1 i6 U% e. e+ H6 h1 r. e% @* L8 D+ G
static struct platform_device da850_evm_tl_leds_device = {
8 [& j. O6 F; X: Q .name = "leds-gpio",. a& y T9 M$ R$ t9 \% P
.id = 1,4 @% g- A5 c$ @
.dev = {. `0 O6 R, F9 v/ e' m
.platform_data = &da850_evm_tl_leds_pdata,% i! W9 Q; D- X% W Y9 A
.release = led_dev_release,
$ y; E6 I: ^/ u* x( l" k; ]% t }8 h& {* T* h5 U
};. l7 o# f/ m. w# j5 n
_6 d6 w% p$ ]0 H. E+ y4 S! x
static int __init led_platform_init(void)0 t2 _3 d( r4 Q( {6 n6 Z+ ?- w
{9 v$ ?4 N1 P. e; V1 z
int ret;
- M' k0 k" i5 `) y! K#if 07 m% c$ }* _: n# e& S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 q3 Y5 d+ Q! N- V1 z+ V( U
if (ret)2 ]2 q: m: c& f! D6 I( q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 \/ `! N* u8 B+ I# {' E" M
"%d\n", ret);2 S; z4 a5 x9 X% _ ~8 m7 r6 v- z: o3 `
#endif
; e2 X* K. W/ D" O ret = platform_device_register(&da850_evm_tl_leds_device);
7 v6 @& H5 r+ o* s5 P! u( n if (ret)2 K4 q# B, s' e }7 K# ]" i
pr_warning("Could not register som GPIO expander LEDS");
9 h# R+ Z3 l4 D) `8 U4 D3 \ else
4 K+ l5 n- g) |" q3 Z- r printk(KERN_INFO "LED register sucessful!\n");3 c0 b5 E! }# e$ _% i
7 X& P" @; E, d4 G4 O; } return ret;. C4 X1 z8 H( _$ d/ C) W- Y) S
}
: H8 M, `4 g9 ]. S( N1 g" q u& |5 _( t
static void __exit led_platform_exit(void)) I) Z s2 D4 u# r3 h$ `2 e0 Z
{ s* f, |- \* [9 d( c9 K6 b
platform_device_unregister(&da850_evm_tl_leds_device);! J) Y0 Z: ~: I, t" B" h
6 y: Z2 t: P2 n4 B
printk(KERN_INFO "LED unregister!\n");0 s. E3 W) M" r- M' y3 A) O6 {
}
: G0 f) x$ o6 B/ C5 [
( v2 T1 }! m+ b& S' C" }module_init(led_platform_init);9 c2 L3 ~2 C7 O6 ], ^" p# g
module_exit(led_platform_exit);
7 y0 R/ x' o& i: y2 b! A
! Y8 l" [4 r5 M& |/ T9 qMODULE_DESCRIPTION("Led platform driver");" g1 T+ B' a2 ]5 E) {
MODULE_AUTHOR("Tronlong");; F% b( i) G( ?, K0 C
MODULE_LICENSE("GPL");
' Q( e/ |5 L& M2 j/ J: B0 ~6 t4 Z( b) t4 D8 l
|
|