|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 f1 K" d& j9 F$ C#include <linux/init.h>( ], ` I0 }6 X7 E8 R* o7 A
#include <linux/module.h>
- W8 W/ L K5 w9 Y- q) b0 e& J. F#include <linux/kernel.h>) m9 b7 j! u7 V6 c4 m
#include <linux/types.h>
, P4 j6 g8 Z& i2 H+ g#include <linux/gpio.h>
& ]2 \3 W( H9 J6 y* e" J#include <linux/leds.h>, j, z. n$ V% ^' N2 p
#include <linux/platform_device.h>
4 r# e: {3 ^3 b. f, O
! C' f, Y9 I! q# D8 s) b$ l#include <asm/mach-types.h>
+ x& {' C6 K# _8 c. r- ]#include <asm/mach/arch.h>) b- M/ ]/ x% @
#include <mach/da8xx.h>
8 `3 z6 X2 W7 o! ]7 I#include <mach/mux.h>/ \8 b7 P4 V3 d3 }( p% T8 t
2 M7 P0 o F3 w# _& }0 m1 ^#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! J: g( Z! L! r$ l- n: j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 I6 H, U4 p, q$ h+ t#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# r- H: d: e" T; S: u [; n
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 J7 C) t1 G6 {7 H( i: o* X# e, z; }2 u
/* assign the tl som board LED-GPIOs*/
( I: V& q/ S( ?. D. v0 O; Pstatic const short da850_evm_tl_user_led_pins[] = {
: Z' o' ~1 R `$ ~3 W/ m3 } /* These pins are definition at <mach/mux.h> file */
* g' s* W1 W( o6 m( X0 U DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 R, [; J5 N8 |' h% O -1
2 b! S p$ p( q, o" E8 z/ I};
; O0 J h! d# ^; w! T# @: o- V8 Y( e! l7 H; r
static struct gpio_led da850_evm_tl_leds[] = {
( z% u, L" I( q4 d9 |. [ {
3 o0 m3 L1 P9 G0 W .active_low = 0,
; `) S9 \' J. v, s% o" H .gpio = DA850_USER_LED0,7 t( H4 h7 Y9 X1 Q' p* N( Q
.name = "user_led0",9 Y, t1 M2 n; I5 A
.default_trigger = "default-on",8 m, ^7 p* m+ z# k% l
},
+ O' r1 V; B* }( X/ H9 P {
# J2 C8 f* r$ \ .active_low = 0,6 D6 Y7 T6 v J5 S3 B
.gpio = DA850_USER_LED1,
: X2 b, b: C- Q. V .name = "user_led1",# m! s. s1 ^7 y: I) \
.default_trigger = "default-on",
" n" |9 x0 O% B6 K5 ~ }," |. H1 l9 g' c5 }8 i# Y
{
2 v1 |' N4 v# k8 a" T. G: ` .active_low = 0,
, w) ?0 m+ S7 Y. J { .gpio = DA850_USER_LED2,
3 ~0 C9 Y& m" y4 B8 |% g5 ^ .name = "user_led2",$ r: G! [$ ^4 Y9 a2 v9 o0 L' y
.default_trigger = "default-on",
# i' F$ {0 k3 o! D }, o, D' ^. Q2 B7 h3 e6 R
{# I( m# _/ o2 E' e6 B! }: O
.active_low = 0,
1 n; d+ p& G3 M5 q .gpio = DA850_USER_LED3,
t0 m; K9 d6 }' G3 a7 ?! Y .name = "user_led3",% L; Y) j5 A; r, n& o* D, S/ [
.default_trigger = "default-on",* K: J* Z1 b0 G/ I( C
},) \( s% l3 T) A* x9 W' L9 L
};- e5 E/ K8 T$ Z! L/ H8 l4 @ }/ {" z$ E
2 F. M# N' w) Q9 @
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 K% K6 j5 o6 L
.leds = da850_evm_tl_leds,. H5 N! J3 |% v! S2 @! Y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),* S3 n4 O: `% Y- _$ ?9 `) ^: H
};
; _0 ]4 y+ h% Q! J; n$ W; f$ t, k/ s/ X4 \! r$ X5 ^( U! T6 c
static void led_dev_release(struct device *dev)
0 c3 \1 a& }% Q, A2 E) t{
# Y; X1 q& Y5 s% a. l6 R};
! X- D) d+ Y, N! w$ C g! U6 K0 ?0 S+ `: a* Y2 B
static struct platform_device da850_evm_tl_leds_device = {" _- m: _" e# i# Y5 D4 g' B
.name = "leds-gpio", I* B6 q7 @) O* l& v
.id = 1, b5 v) Q( o+ N# B! l
.dev = {
2 Z( Q# U5 H! s: {9 }, G- @ .platform_data = &da850_evm_tl_leds_pdata,3 o7 B; H6 t& P0 n! c
.release = led_dev_release, C- E4 Z8 H. D* z( o5 a3 l% _
}- F6 ~0 i" I- V: U' o: j/ J
};
) G5 U2 }* r3 m" `7 U' H3 E8 y, T' ?: M
static int __init led_platform_init(void)
" O) o3 W, y" y3 G! R$ L7 |{
0 x' @. |; H- n3 M# J int ret;
$ F$ `8 z/ X5 Q+ a$ \- {' d#if 0
: f n6 Y3 g6 b7 H$ b" j! \1 x ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 O' N! e7 W4 W6 S' O
if (ret)2 m+ ]8 {" j { ?) i+ r! q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 h# o6 O# [% L+ u. |( X "%d\n", ret);, `. m/ k, b, P$ R+ ?, d
#endif2 Z: u+ `% K& F( U
ret = platform_device_register(&da850_evm_tl_leds_device);& d$ U3 z9 H: X4 W5 I! i
if (ret)
. S$ B6 _& O5 B8 R! D pr_warning("Could not register som GPIO expander LEDS");
`7 h. V' z5 O) v8 ^9 R, I* C/ D else
7 S# A. L$ K8 c4 m9 x printk(KERN_INFO "LED register sucessful!\n");
& o6 k4 c7 d$ g( D* `. Z
1 I# w1 k4 C: Q, H return ret;
5 m8 Y* }* j7 ?1 y}
" M5 g4 l2 L! g) q& u1 D- K
' T; Y) ^9 D5 kstatic void __exit led_platform_exit(void)
" p2 u1 T: Z0 t% _{! I+ y/ b) v5 l
platform_device_unregister(&da850_evm_tl_leds_device);
% Z( n; F& U/ X1 X
a5 U! x2 A& d' @& Z9 G- K* ? printk(KERN_INFO "LED unregister!\n");
i6 v4 d/ k4 i. p0 i1 p% {}
! u) P+ H7 ~1 k) u; {
( z# p; Y6 i1 y9 P9 ]module_init(led_platform_init);
8 `. X$ U; P( M5 W X% P. emodule_exit(led_platform_exit);
0 E8 a- o& t2 _. ?0 ^, b- G: b' B( `. I
MODULE_DESCRIPTION("Led platform driver");' L" D' ]( d5 l. N
MODULE_AUTHOR("Tronlong");
# `5 P) {8 R: W+ M) hMODULE_LICENSE("GPL");0 L- r" m0 _+ {6 |
: Z6 N8 `3 ^! z
|
|