|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 O# f9 A, K- p6 s# R0 F. V- F
#include <linux/init.h>
% c3 D+ b" Z7 }5 Z#include <linux/module.h>0 ~9 U9 {* }9 ^( U4 Q5 Y
#include <linux/kernel.h>
0 f; P O6 A) A$ G8 G8 V; s6 s#include <linux/types.h>/ c7 `: `% e2 N
#include <linux/gpio.h>; J9 S3 F! y* u& D, s
#include <linux/leds.h>" f& r( C2 ]' u/ f5 m, G( n4 N* u
#include <linux/platform_device.h>4 W4 v/ k( i: p6 c" G$ r5 u
$ S5 ^0 ]! z* N* t% D0 w6 Z
#include <asm/mach-types.h>
! i1 d" N1 t: V2 e& V/ O2 E#include <asm/mach/arch.h>' c. W) f6 P A( K1 {; N
#include <mach/da8xx.h>" s+ A" V" n+ T/ Q5 c( w
#include <mach/mux.h>
6 t& g7 w* ^ l& B, n, R
6 g, {1 o. ], F8 g: A#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# r' @8 z. G; Y" A, t
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- F+ M) r, R, }3 _( R3 }6 ~' G#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
1 X: \/ Q0 i" `! P6 J+ j4 `9 a3 o#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): p7 N2 {" ^% l5 m$ p$ B
# P0 O ^9 a& P9 Y b" c
/* assign the tl som board LED-GPIOs*/
6 `; Y4 U8 s3 t5 X2 ]. G# I r' rstatic const short da850_evm_tl_user_led_pins[] = {: R9 f7 S1 x* X
/* These pins are definition at <mach/mux.h> file */
# `- t& a4 U! K6 J DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 c* G7 a U. ~4 Q3 l9 a; I
-1
8 L7 A1 y& V* j};
% c3 H3 d- ?' i* v1 ?$ P% Z2 ~( }6 E
+ U7 f A" N- _$ o" |static struct gpio_led da850_evm_tl_leds[] = {0 U1 t1 ~2 j8 D/ L& { Z0 ~2 k
{' I+ H: r& l! t" [& t0 d1 H
.active_low = 0,
" ~7 O1 Z2 X' N5 l/ _+ | .gpio = DA850_USER_LED0,2 y$ ^7 p+ B" u1 u6 o4 |3 \
.name = "user_led0",
2 {1 ^: E. U6 P7 Y .default_trigger = "default-on",
" ?: _) v2 F/ X4 r0 |$ G },
' w2 r- D( m$ T, u {
3 Z$ Y' D; |0 A: L+ c6 V* f3 X .active_low = 0,
7 b# I# C. O. |" r .gpio = DA850_USER_LED1,
! c, z2 w1 ?. a" _* w8 q: F .name = "user_led1",
" I+ s4 Q A! w; U$ U: I( Y7 i: B .default_trigger = "default-on",: K& ?" l6 v8 n ~# m1 k/ \
},& }& ^; }* L& ^+ E/ V1 P$ c
{
9 v8 l( V! Z+ n+ r6 _ .active_low = 0, p5 i, M! s: T, j
.gpio = DA850_USER_LED2,
5 V8 p, E* P+ K. D) i .name = "user_led2",: B4 R2 m5 N4 |% C' r
.default_trigger = "default-on",- a$ w& T& g# T" w$ U- N% S1 [. `6 k
},0 ~% T( {: @# d/ e3 W' A6 k" p1 C
{* B* d7 O8 Q; b0 G, x0 b
.active_low = 0,
! g( Q; ^% C$ Q" S3 Z .gpio = DA850_USER_LED3,+ Z, U( K% ?' ^4 e
.name = "user_led3",; l- Y8 {5 @; u: N
.default_trigger = "default-on",
# u' i3 l# ?/ h },& z6 [% ` _& T$ f! ^7 o
};+ y1 @" ?% j3 T9 i
( q6 D& n9 q3 g9 N1 n7 ]1 l$ C3 N5 ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; h. y0 d, a* r" s; I1 j H) g/ O! O
.leds = da850_evm_tl_leds,4 A5 ~7 d& m9 {& X
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 N% E3 x8 ~/ y" j# k
};8 {+ k$ p" E% D. {; x/ R5 h
l8 u# M' T( G ~static void led_dev_release(struct device *dev)+ j7 R- w9 z- z4 ?0 N$ r, `, g$ |
{
+ s1 p6 L& J# ?) G) b7 K) M};
9 z( _* s, q7 J9 l8 `5 b* Z
: N/ S' {$ U0 O$ N% zstatic struct platform_device da850_evm_tl_leds_device = {% J2 M- P- g! J2 w8 c
.name = "leds-gpio",& O6 o3 g- ^ L& r
.id = 1,- s1 Y* z( Q2 }5 K- E
.dev = {
/ S2 ?% _6 u6 {) l! n .platform_data = &da850_evm_tl_leds_pdata,
1 D% V% F5 C0 E5 [. t& f! f. ?1 ] .release = led_dev_release,& p) f, F0 y2 u6 y% t5 V" V/ r
}
% w; ^% C1 B; E3 s& b& ]* `};" K7 t! W8 B H
4 w" L b& ?. u4 ^& R9 b! ^, D
static int __init led_platform_init(void)/ Y$ s+ d) J1 R+ ~! w
{
# E) K) Q# q$ [8 v% z4 X* @# ` int ret;2 R! ]0 u* }& H
#if 0 d" ?" [6 ]) ]+ h5 @4 z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: A( s0 J. \' z4 R* G
if (ret)0 ]8 U7 {+ j/ _& d
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# U% V( h. @5 F8 E7 b
"%d\n", ret);
' v3 [7 I, ?" P( l* e' a+ ]4 Q#endif7 A h8 g# |6 E) M2 P2 g6 Q' \; d- `
ret = platform_device_register(&da850_evm_tl_leds_device);* [0 H( G, l! Z: N8 m3 k' E1 n$ C6 h
if (ret)
3 m G$ F+ z5 d" T" y pr_warning("Could not register som GPIO expander LEDS");" s g/ |) V& ~1 O. f
else
. b. B( P0 J, i printk(KERN_INFO "LED register sucessful!\n");4 p9 L! ~7 d* C
: I+ y! A3 Q2 l; i% g9 v return ret;
M. Y# J! b8 _6 J3 Q}& w* C6 r5 ^# Y" x
! |! Z$ i' X# P n+ F
static void __exit led_platform_exit(void) Y9 S! b' q$ [( b5 E
{
, t, Y6 B1 Y3 C( Q, \0 c6 M platform_device_unregister(&da850_evm_tl_leds_device);- H8 g& z$ K' v+ a, f% s" l
' ^6 j. J2 x7 o( I8 }3 w/ Y7 C6 ` printk(KERN_INFO "LED unregister!\n");
, C3 y( `, w1 |5 c4 J1 w3 M}
6 I' H( I/ p' p0 L$ x5 n, O" Q3 X$ t/ {( p
module_init(led_platform_init);
5 f, B0 H0 `+ ~6 O- F) z! Rmodule_exit(led_platform_exit);
4 t* Z. ]8 W4 j
6 C! }$ J5 o' o# F2 h. A3 RMODULE_DESCRIPTION("Led platform driver");5 ~1 ?( s& B0 `% P2 g
MODULE_AUTHOR("Tronlong");
$ H% G0 Q3 U1 N! p) M5 o) S% Q& ~MODULE_LICENSE("GPL");
2 O* |/ v* c3 J
* R# [* \2 l2 p8 L( m; _- _4 J- I |
|