|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" i0 z- [8 S4 T% f- O#include <linux/init.h>
/ g+ u$ J. T* C) ]7 n) b#include <linux/module.h>
. r* Y+ k: v. ?( D' T5 ~0 h$ ^#include <linux/kernel.h>
. t1 O9 P$ n$ ?( H#include <linux/types.h>
) h: K' A" N( E6 Q9 \8 b#include <linux/gpio.h>/ f# I& }5 D+ ]) n4 K! ~/ N: S
#include <linux/leds.h>" q) a/ I6 G2 m2 k' ?( g
#include <linux/platform_device.h>& F5 W T/ v1 m% n8 r
5 J5 r& _& z* D* G8 I#include <asm/mach-types.h>
3 d/ ]+ r+ A6 u1 P: {#include <asm/mach/arch.h>
) S6 U6 r; I( D$ \$ q4 u#include <mach/da8xx.h>) d+ B; b$ ^' C2 @4 w
#include <mach/mux.h># y0 q& K; R& Q2 ^' ]5 t _
; @' o( ?/ Y5 B% e2 v' s
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 U/ ?1 i& _# Z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 H# ]% I: N. r* m' B0 M/ q- C#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# f! D" _4 m" C6 W# R& b1 N- I
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
i: A! s' c& w6 {7 O, }3 l' p4 B$ i+ c
/* assign the tl som board LED-GPIOs*/
" G1 l2 G4 u# k& {static const short da850_evm_tl_user_led_pins[] = {
# P/ E! M9 x6 T! [3 G. c7 A /* These pins are definition at <mach/mux.h> file */
9 m- i/ B- H, x+ L/ f6 | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 z1 |5 d2 t( w) C" L( m' M
-1 p! P5 H$ _0 y
};! A; C9 m5 ]( {- x# E
+ e. n; } ]# H; M* Astatic struct gpio_led da850_evm_tl_leds[] = {( I4 t6 Z4 G1 X8 R
{
& s% S8 V+ S, Z- z1 j; q .active_low = 0,+ J- e. m3 e; T5 N+ L0 x2 [1 n
.gpio = DA850_USER_LED0,
% T8 w6 I3 G: j, H .name = "user_led0",8 V5 M z0 @/ g
.default_trigger = "default-on",
. S+ X" q9 ~$ F4 ~% V' X },
& e' x Y2 B. Q& Z' G- Q* C, } {) c4 G$ T- m" Q' g V; G
.active_low = 0,8 `5 x) [& d0 C) P; b$ M6 \. a5 ]
.gpio = DA850_USER_LED1,6 N. R' J: [0 M) R6 e' v7 ?
.name = "user_led1",
3 X2 l D3 W/ k4 L! V/ h; O* j9 d9 M .default_trigger = "default-on",
/ E& u) V1 E; r, V0 F4 [- t& ~5 P' Y },
; U- `. p9 \- L/ i O% F2 c {+ Z( t. `0 H3 T3 A4 B$ I
.active_low = 0,4 {, H$ G l T" F. c
.gpio = DA850_USER_LED2,
2 x/ w5 v+ b! `, Z' E2 \ .name = "user_led2",
' W) M, E! w- O2 N6 D) M% \ .default_trigger = "default-on",
5 q6 R# Q9 c" h/ o( z* l },0 [% ^# o; b. m6 E8 G
{
" P) D" k+ H* e f# M% d* ?( Y .active_low = 0,
2 P& O3 ^% a2 l9 q .gpio = DA850_USER_LED3,' m% B, p1 c% X( M, @! x# t
.name = "user_led3",4 N) h( T; m d" @7 x
.default_trigger = "default-on",
4 Q. a4 d+ ^: ?0 |6 ]- Z },
. p, x3 C; R! }: B( L};* f' u4 R2 @8 `) }4 {( Q
9 q/ h1 Q' F, A0 }: U7 P( \2 r
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% W1 y" z' D# [2 e7 K
.leds = da850_evm_tl_leds,- R: s" {/ k: o" \8 O4 \
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ U- L7 I: p/ }/ {+ {};6 i* V# I7 O d( H, S7 C2 w
2 `+ S# C" p' @. q" ~* T
static void led_dev_release(struct device *dev)
3 ^6 W* C, B+ t{6 i! ~" _ r# F) k E1 @/ p
};8 v( |$ J" T) z
; r6 o& J& V/ @
static struct platform_device da850_evm_tl_leds_device = {
! w, _5 P" r9 J- t9 c" n7 o9 q5 x .name = "leds-gpio",
! Z z+ o* R( s6 C0 S .id = 1,
. `. A [! N( A .dev = {5 A1 l9 Y) L: Y& {+ h0 m
.platform_data = &da850_evm_tl_leds_pdata,
( f9 q7 z( b! o. J- O+ j% C .release = led_dev_release,
7 @! P+ e9 |; K3 W }; C4 O( ]( B* x, F5 @1 g
};4 B, g/ \ y" x' S2 t6 t9 @. v3 U% S
! K' u2 d/ N; r) I
static int __init led_platform_init(void)
" z' T* E/ C! D6 @{) [; H+ O; R- R( E# n. Y9 w
int ret;# ^; e2 y( b+ B8 l
#if 0
2 k: {& [4 T2 b) ]! a7 o0 C ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# M& M6 ]' k4 l: ^7 P$ P if (ret)6 ?/ u$ B8 E% `9 G
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ y; ^" x' Q$ t# o+ l "%d\n", ret);" A/ G4 q% w) K4 k2 e
#endif
+ N* X: e2 y' D$ c! P0 | ret = platform_device_register(&da850_evm_tl_leds_device);9 U. W% o1 ]6 o* M5 F
if (ret)
3 i0 A( u+ i9 k pr_warning("Could not register som GPIO expander LEDS");3 F* {, U6 f( |* T; K
else6 R7 M5 `% t) o9 g1 U
printk(KERN_INFO "LED register sucessful!\n");
! o. v9 z \+ i4 W8 }/ S: u0 c- D- |, |* N# z+ c- Q: Z
return ret;
( k1 v2 `0 S7 ^) H: @$ h8 \}" r& C+ p8 K' _! S( l
4 v' u/ |/ p9 I, Z6 b% E: ]0 E
static void __exit led_platform_exit(void)
, ?; N0 Y' ?4 `! g{( W K5 N; X) f+ n( }4 v
platform_device_unregister(&da850_evm_tl_leds_device);
3 i4 V9 m5 B* i: ]. @ E# s0 @3 a1 z7 O- B: T5 L
printk(KERN_INFO "LED unregister!\n");
" U5 P7 p- v+ _: [5 t% P; ]1 [}9 Y4 `2 H0 Q) ~" t/ d* F7 r
. @7 Y* O+ B/ I$ Y# u1 Gmodule_init(led_platform_init);- {" C. E3 v6 }& t/ n
module_exit(led_platform_exit);
( u4 D# i" W8 `: Y9 @1 y1 b0 `' t1 B; d3 y
MODULE_DESCRIPTION("Led platform driver");7 z9 W- P9 [" b* ]
MODULE_AUTHOR("Tronlong");
4 n5 {9 f8 i) |: xMODULE_LICENSE("GPL");
$ \3 R v; J J2 k9 t" D0 M/ j3 z1 @# a3 \. c7 E& Z' ~5 h. `) ]
|
|