|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 E7 Z0 t3 I' M/ n+ ^: Q4 |# V" {
#include <linux/init.h>% U& b J/ f+ k+ F5 H+ C, g
#include <linux/module.h>9 R+ a$ Y5 G- R. A% R
#include <linux/kernel.h>2 N7 h' C/ o7 j# i3 k
#include <linux/types.h>
1 L7 `/ W8 e2 c" o# X#include <linux/gpio.h>
9 I; _8 ~* S$ W; O' S9 b#include <linux/leds.h>
) @1 u$ @4 D7 L' @- |4 J3 U5 O#include <linux/platform_device.h>4 D* V+ S) B+ }; f9 V4 E1 W; p& E
4 R3 K0 V" s3 q#include <asm/mach-types.h>
( V& F, K' f2 z: {2 B/ N#include <asm/mach/arch.h>
, n6 G) Q4 @5 z' O) i; @+ E' d#include <mach/da8xx.h>3 K% `2 E: i8 K6 K- h0 p
#include <mach/mux.h>: ~/ l9 a+ o! D8 v! V4 ]! H
( k) X! F7 Z8 W#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 E: t7 m. z! e7 c
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 a3 ?& \8 A' N- z& [#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- T# Q3 W- G" |) t8 N
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! t: e B+ E: ]4 I
2 [2 L$ S: T5 c0 x% ^
/* assign the tl som board LED-GPIOs*/1 P: |4 O) t/ e
static const short da850_evm_tl_user_led_pins[] = {, v8 v8 g. j8 z" F* ^6 T8 i
/* These pins are definition at <mach/mux.h> file */. |9 ? n: m3 w5 R& J, X- s; t
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 p/ _; J+ s9 q3 j' _
-1
) O6 L1 o! y* W};
F# z. Q$ R6 H0 B6 _
8 d3 v6 C1 p! Y- U0 P+ m% Fstatic struct gpio_led da850_evm_tl_leds[] = {
! Y# C/ C' `6 M \% O- O% E' ~ {
' E+ j$ d+ d4 h3 m! \- c: T+ B! n .active_low = 0,1 f; W& C5 C1 _- B
.gpio = DA850_USER_LED0,
" w) i3 z9 R- O .name = "user_led0",9 o4 e4 U J) y4 \. M
.default_trigger = "default-on",7 u- a o8 `4 }
},
8 E' i( ?, z {3 Q {
# h1 b2 e/ _, P$ i# b' W s .active_low = 0,
' {9 d: @2 ~" J# _ X7 e .gpio = DA850_USER_LED1,
2 O7 Z& A. p% z+ V; X( A4 f4 x" U) Q .name = "user_led1",% R( q Y$ H5 \0 l. i
.default_trigger = "default-on",
% S8 d9 c/ i7 ]/ @, Y0 w },
4 A9 Q% n! \+ a0 [: z {# w$ {4 O9 x$ p6 q
.active_low = 0,
5 {7 r% \! j% F0 t# b! K- q7 i' D .gpio = DA850_USER_LED2,
3 W3 v( v! r. o( n; u .name = "user_led2",
: W ^5 a# ]' O# S$ n1 _9 S .default_trigger = "default-on",
1 ]* y( |, n5 @9 s0 b: S },
% \4 K1 c t; p8 \ {" j; l8 G. W8 A3 ?) g$ c1 w6 q2 M
.active_low = 0,
( H! R4 L1 t8 F4 O9 X3 C3 C .gpio = DA850_USER_LED3,
$ ~# c9 f1 R# L( ?& O% e3 N .name = "user_led3",
" _0 r9 h2 ~, ?& f .default_trigger = "default-on",$ v6 [0 `* ~3 ^0 g/ `" z" z
},
$ _/ G$ Y7 t. w% q};/ `' a$ s1 M2 z: V# D
; i+ `0 Z0 D( H" q3 M2 F' |0 Fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( C+ n* r( h7 t5 G: u
.leds = da850_evm_tl_leds,4 L- x7 z( H# u: q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 s+ W" f) m4 D: [) l
};6 ^+ r! Y3 d/ X5 ~5 J" h
7 q: {( g( G h. M
static void led_dev_release(struct device *dev)
% x$ a# |) a3 s* ~' o{
& B* h p: x" k! M8 T+ ` n};% r, F+ y/ j0 T
6 J9 {, B I6 X/ @: E& [static struct platform_device da850_evm_tl_leds_device = {7 |6 T! X& s! _. ]( g g
.name = "leds-gpio",
. a+ M" C+ K5 d( b7 {, v& I .id = 1,
1 o4 C x, m! v, K' a) l2 N9 m% y: v .dev = {
1 a J# A& H" Y- F P% H/ f: J/ `$ [ .platform_data = &da850_evm_tl_leds_pdata,8 Y; G, C+ n7 \5 B+ Z
.release = led_dev_release,
; \, o& u. b- h; _ }' D5 P' }! D2 c' y; N& p$ B% [% B
};$ G5 Q2 d2 v" d+ \( E! ^) y
( O$ B0 G2 W8 @7 K# wstatic int __init led_platform_init(void)
& ^- B. k6 J8 {3 j; D5 [$ {{" i0 {" |* J3 G/ c; ^
int ret;
E- _) A- T$ `1 M#if 0& q" @$ U4 ~8 s
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- N0 p5 r% s* {9 ?9 C6 ~/ h) \ if (ret)
5 F' M9 h; h( r) T! a. l) y& E4 ? pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ z; F2 I2 V- H0 Z) Z. f9 j# v "%d\n", ret);
5 y# ^' p/ |- I5 l0 T+ z% W: C% F#endif L* C. A4 r9 {& X& I5 F4 x
ret = platform_device_register(&da850_evm_tl_leds_device);
4 Z( D; w* n P- D1 W2 L if (ret)
; Z6 o( t# [) b6 ^ pr_warning("Could not register som GPIO expander LEDS");
& m, `: t$ b" W else9 m4 A0 s1 t0 s" _
printk(KERN_INFO "LED register sucessful!\n");
/ O. ]; f3 D- W6 g3 I: k4 P, Z; G3 W8 f3 K
return ret;
: z5 b( ^5 C+ V7 q" O- Z: ]}- p u* |3 Z" M. z
! P8 C' G: i$ E% Y' N9 }static void __exit led_platform_exit(void)4 Q3 o m: K' F: V& Z
{
% d# e L- }* W; u& f4 D, V: F platform_device_unregister(&da850_evm_tl_leds_device);
) Q$ A: Z) z7 D+ b8 ^8 w8 E6 u/ T- g: J
printk(KERN_INFO "LED unregister!\n");
* @' e# W7 ]0 ~% f/ h+ Z}. b R1 m7 l/ }0 S; a ^
6 S4 m; v; i wmodule_init(led_platform_init);( Q3 P8 ?# K2 g# }" i" |
module_exit(led_platform_exit);
0 U8 j- k) G* l) o9 G* L9 i) K
" o' X$ Z8 M0 a/ TMODULE_DESCRIPTION("Led platform driver");
0 n- \3 }7 a% e" [. U4 lMODULE_AUTHOR("Tronlong");1 x1 m9 L5 ~8 }8 M
MODULE_LICENSE("GPL");+ n5 g. r0 B' {
- T" }8 G* H) [8 V8 f& x9 M |
|