|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 y7 v& T5 {: | f8 N+ y0 Q; ?#include <linux/init.h>
5 q: ` N" o" V7 I+ k% x" O3 R#include <linux/module.h>
; H0 f4 ^. k) z9 X: S#include <linux/kernel.h>% `: U S: k8 ]+ [ Z. x7 c. Q
#include <linux/types.h>
7 o: T5 X' U' ?9 P#include <linux/gpio.h> o/ S3 W: P& r- o6 s+ Q
#include <linux/leds.h>' J+ K6 P% u8 }/ ^$ p
#include <linux/platform_device.h> ?2 V& [9 P* P# g7 v
4 z! L* S/ X+ u5 T#include <asm/mach-types.h>
6 e5 w$ J' {! { @: o$ w* A3 o+ \6 F#include <asm/mach/arch.h>; [: x* k1 X! u) o9 U E4 H& k
#include <mach/da8xx.h>
6 f7 I0 n1 u# e) `- l: N4 A. H#include <mach/mux.h>/ y% l$ @, e r* Y6 C& ^1 j
8 m1 f/ L' e7 } z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 D' t( u! A- {6 h
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 D( [: j4 b2 A) P#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ S6 U. c( |: K5 B, \" H
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). s- _) s5 b) V7 m
+ O4 A! B! m0 A2 x/* assign the tl som board LED-GPIOs*/
) W3 ]+ V5 Q- N! B4 N: estatic const short da850_evm_tl_user_led_pins[] = {
9 V- ? ^4 n' ? /* These pins are definition at <mach/mux.h> file */
' K% ^9 ]9 z8 t% U' ~ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 j. O7 w* B0 F( S) d -10 t; Q6 @, D, S' k' \. {* j) z
};
, D) }1 U- H) u$ f" Q& N: [
7 J0 J9 a6 \3 \3 R7 Y/ astatic struct gpio_led da850_evm_tl_leds[] = {
. ]( A1 r1 F! n2 x; E# v {
/ L7 X" I7 m( ^$ g0 V .active_low = 0,
/ a6 b9 H( o8 H! z2 k- g .gpio = DA850_USER_LED0,! a( u; I ^0 E) k3 g1 Y
.name = "user_led0",3 ?3 @9 ]# ]0 d* [0 ?
.default_trigger = "default-on",. y5 C) N$ m. E2 N2 ^ a% M* c
},
) }% K7 W0 W& t& l5 I S9 S: b {
& `; W8 i2 r N% ~8 \: l .active_low = 0,
: _! N) G# M4 g' I; [' i .gpio = DA850_USER_LED1,# i% A; C- |) K1 b2 u% n2 t
.name = "user_led1",
) D! }- ?* v8 C+ ]- T: T. ^ .default_trigger = "default-on",( C# j* q/ B+ y2 V& ^
},3 |6 }# R+ |+ B$ e! p: }: W
{. q X( z3 u8 @
.active_low = 0,1 d1 j- g' Z* g0 V: c. \
.gpio = DA850_USER_LED2,8 A" A7 z* i/ _- k6 Q' j5 S
.name = "user_led2",: a' i7 c9 c- M
.default_trigger = "default-on",
" l$ ]0 }7 `" p T },
4 ]5 z J0 ?+ c {
9 i2 d% d+ S( ?: T1 h/ u) B/ R2 v- b .active_low = 0,- j) x% e3 l. y; \1 x" l& p
.gpio = DA850_USER_LED3,
# `; O0 L% c. P% w8 I .name = "user_led3",
3 X, S" `7 M( ~ .default_trigger = "default-on",+ o+ O V$ T8 z+ ^* M1 Z% }
},' \' J0 f/ z9 j6 k, E; d
};
+ G6 q, R) }: D" T
# L0 M+ H) ~% `& X2 _/ Vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' i0 E3 j$ L- R
.leds = da850_evm_tl_leds,
0 y- e& u' D' L/ Y: v .num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 V+ P1 G9 g, M+ e) C' q
};
F/ [3 e6 s+ l% Q+ G6 @! O, r2 i/ D! E: W
static void led_dev_release(struct device *dev)
/ @& |6 h" i& d+ u" J/ k{, t+ v: P$ F0 S% j! W1 e* Y
};9 G- E# D' ^& z/ o' t& p) m
1 [* W( J9 o7 lstatic struct platform_device da850_evm_tl_leds_device = {
1 K6 ^) S( W% H$ q! R8 } ?, z$ @4 r- _ .name = "leds-gpio",
( _5 u- j/ A0 C( k- ~2 n .id = 1,5 t- Q2 h2 w8 I- T, x
.dev = {0 U1 ?) X! _( m$ W4 {
.platform_data = &da850_evm_tl_leds_pdata,
4 r# s. G# D* |' R2 F) E4 w .release = led_dev_release,
, U! J/ `# v7 P# ]7 x; g }
( R: |5 P1 T; c% p* q};7 P5 W4 _% R+ m6 f+ T
% K- \( B5 u D! {8 Z# Z0 z5 mstatic int __init led_platform_init(void)9 e" T; t2 u! C' H+ F% s
{
M; O3 y8 x& o4 ? int ret;
) |" W. e3 H. `4 W; E#if 0
7 s) U7 P* H( l( _5 m4 a" f ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 h# z+ Z- ~( V7 a7 C
if (ret)
' s# f4 L( a5 E( J F9 k pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' F/ r( K( `6 c7 S "%d\n", ret);2 j* u1 K+ g" A# a
#endif9 h4 g' k% o. y1 Z
ret = platform_device_register(&da850_evm_tl_leds_device);
( n; ?# r4 \# m/ @ if (ret)
* e& M' l4 G) a, N5 a; E pr_warning("Could not register som GPIO expander LEDS");6 o) _5 I# _ \1 Z! E! o
else$ U3 [" l; n# G0 p/ `
printk(KERN_INFO "LED register sucessful!\n");
7 x' y! t8 W" p$ D/ f/ X* n! l& f1 G7 L9 p7 U2 B
return ret;
9 g; r- `& Q# V- o}
3 Z9 g: w0 E/ I# ~5 E+ s: g; t7 e# s% [# T8 O9 I9 w
static void __exit led_platform_exit(void)4 [& U% m" R/ F. o# K% D
{
9 O. F% K; B- z- c) @- P6 @6 b8 x platform_device_unregister(&da850_evm_tl_leds_device);
( _2 ~' n( `" {1 b( v1 k- g8 X" V9 R( Y& P# c5 X
printk(KERN_INFO "LED unregister!\n");
8 E/ Q7 C# L3 u! J5 T+ `/ l}
3 G9 C1 a" X, v& K% j
# L o3 ]6 X9 v. Y/ H7 ?, _; Pmodule_init(led_platform_init);
5 ]* ]+ N& S, D/ wmodule_exit(led_platform_exit);' M( l s( \) v3 g
5 K1 r* W2 M) W- }
MODULE_DESCRIPTION("Led platform driver");
; i7 K* a# F, T; e5 `9 E. xMODULE_AUTHOR("Tronlong");9 w! D- A" s5 `# k( l
MODULE_LICENSE("GPL");
4 _. q& M& P: R, Z! a0 G3 @2 e$ [& }8 Q) N( e, i
|
|