|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ z8 y1 a9 v0 e( d; t' Y6 l5 K#include <linux/init.h>0 r% E0 O3 j7 c& C" z
#include <linux/module.h>
0 E' {: u. u( |0 N+ J#include <linux/kernel.h>& Z4 l5 D8 a" D1 E* `
#include <linux/types.h>! f0 H1 W m( K& a4 [" l
#include <linux/gpio.h>7 A* G' b+ M3 n5 o6 b: [
#include <linux/leds.h>+ @' S, ?. k* n) e6 ]5 m% H
#include <linux/platform_device.h>
! R2 w9 Z8 l4 d- A& s
" l) ~" i3 H; u; M#include <asm/mach-types.h>
- V7 e9 @; I: M; T+ B#include <asm/mach/arch.h>& X8 H& w- w# K$ [$ @2 W
#include <mach/da8xx.h>4 q8 I b/ E$ e( {+ ^; A2 w4 J
#include <mach/mux.h>
' Z9 M+ h+ V' P
+ S u% l% _2 x: M; m#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 M. p. W* j H% u+ a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 p1 r0 s& I( i- b4 z; S6 }. R#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 ~/ ]5 u6 E1 ?# |, B2 S7 ]3 c' r. x
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ g$ c* p4 w) e/ r/ |" E
8 Y% h$ |5 T3 I L9 }6 |/* assign the tl som board LED-GPIOs*/0 X- b. T3 a+ s K5 Y
static const short da850_evm_tl_user_led_pins[] = {$ M% O4 H2 U( p. o% _3 x. ~
/* These pins are definition at <mach/mux.h> file */
! v4 N$ y# o7 p DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% F/ r; D. `+ W, a( n2 m
-14 w' B1 Z% @+ y2 p. ~
};: Q1 c0 S$ b% t
% ?, }+ m( C' V- V: Lstatic struct gpio_led da850_evm_tl_leds[] = {: Y' D5 U A ]1 C
{# v9 S9 F$ g( T5 y
.active_low = 0,
( U9 Q( l! Z& z .gpio = DA850_USER_LED0,5 \; P( d8 f% Q+ i ^# J H/ b" e
.name = "user_led0",& F. P& E9 m2 S. p" p
.default_trigger = "default-on",
- z) ~" G- g9 R( x },- w+ T p( o% X, a" V0 _: r% `) e
{
+ e) X$ r* t" k .active_low = 0,
! n( Q/ b/ }$ m+ u" \9 L1 A .gpio = DA850_USER_LED1,
f% ~9 f7 g! Q$ ~3 J9 }4 y( U .name = "user_led1",/ y7 L! g. x5 E& T- L" u
.default_trigger = "default-on",
% r- @: m. u$ n; _$ x4 V" s },$ x& _, I% I2 A* q; d
{
& p1 R1 q+ F$ }; ~8 F8 _& w .active_low = 0,6 I8 R, q0 n( j0 E- F
.gpio = DA850_USER_LED2,# o8 B1 e) B7 \; m; K0 e8 D
.name = "user_led2",/ c* l4 F$ P8 d8 ~, J
.default_trigger = "default-on",
, ^( Y- R1 s& d T; ~% {7 o9 ` },1 r$ X% g1 ~3 b! G+ n$ q3 z) z% H/ l Q2 ]
{
2 h7 S4 T K* K% s# J) U .active_low = 0,; E/ Y- d0 j0 E. p6 o
.gpio = DA850_USER_LED3,
! P+ x; P) g( [ .name = "user_led3",
- w9 p _; F9 g" F4 a .default_trigger = "default-on",0 n; c+ C& \ N" T$ Y' A
},
. L* t+ y1 e6 h N/ z1 B Q};
( p v# F% H" _1 c% [) X7 A
, F/ \; W2 W) G- mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% b: b o8 D5 M Z7 c .leds = da850_evm_tl_leds,! }6 k1 T+ L1 z& s! b% @4 |
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),( a' ? f; A# B; T* N$ ?$ r$ G
};) {8 T5 x" ]. X( C) k7 X6 A6 j
2 K! K6 O8 n( i3 pstatic void led_dev_release(struct device *dev)+ F$ a) W8 D/ W( O
{
/ _' J+ H3 E a2 A3 D4 I}; v4 ^" p+ k% A4 E# C; D4 C u" S
3 |7 b. A5 k4 Y3 l2 R, Pstatic struct platform_device da850_evm_tl_leds_device = {
% [ N- u8 f Y+ l' @9 Z. q .name = "leds-gpio",
* E& a: ? j: { .id = 1,' n0 N; r2 s+ Y# E+ t- M
.dev = {
% A% r9 h/ h: ]2 _1 u% l5 O .platform_data = &da850_evm_tl_leds_pdata,, u4 e' s7 I8 S" ~4 Z6 f( b
.release = led_dev_release,! S/ u1 e& a2 S9 i
}
0 I& H$ v1 a1 G9 }9 v: t/ [1 x};
; t W5 P2 V0 ]- t6 x" ?2 s7 e9 B# ^% y7 N7 e8 E
static int __init led_platform_init(void). v4 j& X. ~' b- f% C! o! d
{" x# ]% G `' ] ^. B7 W
int ret;
n3 e: j4 x7 ^#if 0
0 E h8 | i; F p% i' W ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. P8 @- }0 \1 y7 _8 I
if (ret)9 z) C8 {& U1 J- q9 M& b( l# t
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* V9 D8 [8 U4 D0 `+ s$ l
"%d\n", ret);
_6 J: ~1 S4 s% I$ E#endif' d5 _0 y0 a9 G' } R4 M) r
ret = platform_device_register(&da850_evm_tl_leds_device);
6 r( k4 S1 A9 x+ F- X3 e if (ret)- }' X. d. @7 y" T* |4 f
pr_warning("Could not register som GPIO expander LEDS");. w3 K7 N1 k1 ^, m. o% \
else4 p; U! `. ^9 H4 {* @6 U( W
printk(KERN_INFO "LED register sucessful!\n");
, e& X2 o7 ^ [2 p& ^4 I, _* a
7 v. U( W3 j, m return ret;" J, P3 B( ^$ @
}% f$ z6 k% h7 V( r
5 n! P& W5 Z7 e! g% D$ c4 cstatic void __exit led_platform_exit(void)/ A6 B- E: t! k9 h
{
) O0 N; G" T1 W0 v/ L4 l3 ? platform_device_unregister(&da850_evm_tl_leds_device);
1 ~' J) E9 V$ P$ H
6 Y0 H8 }) t& b# K7 `, } printk(KERN_INFO "LED unregister!\n");
; Q0 y! e2 r$ h5 Z3 {% }}/ Y9 e( _! w# }3 K
, \) l1 Y$ [8 P1 L. Smodule_init(led_platform_init);
5 ?2 f+ W2 M9 r% ]7 E! q6 a! Ymodule_exit(led_platform_exit);- x2 n7 ^& b/ r$ s( X
3 y. a1 g% p$ ?
MODULE_DESCRIPTION("Led platform driver");4 I+ k3 w+ ?: Z7 `( A/ d
MODULE_AUTHOR("Tronlong");0 o; R; ]2 `9 Y7 P/ z" V2 s
MODULE_LICENSE("GPL");; m: J, u7 D7 m% C2 E7 O1 Y
$ M# H5 w6 v) y8 E! c |
|