|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 T- s) V3 e$ Y1 m#include <linux/init.h>) z& Z( f+ c& G! ]* j/ z
#include <linux/module.h>
2 q. |3 M' N4 K+ m#include <linux/kernel.h>
, @" ?9 z& ~! i' U& C#include <linux/types.h>
/ \$ S2 s# @1 R' o8 N#include <linux/gpio.h>
0 q, R' S' B: k% E' |#include <linux/leds.h>
% M5 }' z0 r7 s8 U" [& `/ G, e5 l1 B#include <linux/platform_device.h>
; n2 ^% B) {+ ^3 ~, a, _; b. m
/ m7 K" z1 ~ g u3 x- m#include <asm/mach-types.h>
5 m! C- r& }4 G! s- c1 }2 I) a/ h* }#include <asm/mach/arch.h>
- V0 X" S" N: a* B#include <mach/da8xx.h>+ _+ Y; f3 O" s5 }! j& r, c
#include <mach/mux.h>+ @' z) P$ F% s$ [. o8 ~
6 j, c$ Q' T/ H7 W6 z5 [: B6 U#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, r' k. W" p6 C) x( o5 v#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- c6 q9 O7 @% ?' o3 ?. p" u V
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 U' f9 j# U4 J5 d, ^#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# B) T7 \6 \% T( ?# v6 L. V* M
/ }/ f8 T% V4 f/* assign the tl som board LED-GPIOs*/0 b! J' {, l" {) L& `0 {
static const short da850_evm_tl_user_led_pins[] = {
( L( ]; M$ \1 M7 G A, l/ u/ T /* These pins are definition at <mach/mux.h> file */
4 y( H' `4 J! T DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 `: b) I! D% u4 ~) c1 Q, O
-1' J7 \/ V3 _* c3 P/ z3 D
};
5 D/ T* w) ~, u% v X Y# k+ v4 `% Q
static struct gpio_led da850_evm_tl_leds[] = {
% @6 u, O8 h. W {
: X3 R' o- p& k" ~4 z7 T .active_low = 0,
( }5 n! t6 s2 v0 _# p1 ^ .gpio = DA850_USER_LED0,
7 H( i' S3 V; p) B! E& Q5 h% L .name = "user_led0",
1 N- o+ _8 u4 l8 ^2 B# s |. M/ f .default_trigger = "default-on",
& n5 c. K( v. ?) F },
( h, C& V; X$ h0 T {, P0 Y- H! T" O
.active_low = 0,
5 ^5 R+ C6 L4 O8 h .gpio = DA850_USER_LED1,, Q1 t0 W4 q! B" S( s" _9 E) O
.name = "user_led1",
/ k$ ?7 u# w' T i* { .default_trigger = "default-on",
* _$ y- T/ \+ S& c5 _/ i6 p/ {7 ] },6 g4 N" L$ ?: Q3 s6 N& ]
{' s! W$ T; f2 D; _1 [2 a4 Z" c
.active_low = 0,* P! u1 k6 L2 P( W# d( t
.gpio = DA850_USER_LED2,
' `& ^0 e. V% o* D m$ x: h .name = "user_led2",0 g+ j2 ^$ }% E" a& ^. M
.default_trigger = "default-on",
9 ^" @+ R! F: U" ~' t& w9 ^ },% e7 s2 X* R3 p' F) E
{
$ H- H; }3 M& ?$ X .active_low = 0,
6 l! g* T" Z# X7 r4 |& _ .gpio = DA850_USER_LED3,
* A; l) u3 F& ?8 f* ] .name = "user_led3",
/ n$ i/ V5 Y. U$ B .default_trigger = "default-on",9 Y {5 W: j0 |, ~ ?5 r
},
- s5 H! u2 O& ]/ ?, O};
. y4 b% y! K9 v- ?3 w
6 F7 t* b. Y' ^7 D4 sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 f" o, e: H* w, K
.leds = da850_evm_tl_leds,: ]8 P8 N l; ^( K
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),! k4 @, i v. m: g: f
};
4 G) a- F3 ?1 [& i4 ~ ?8 Q. H: \% P" o5 A" d
static void led_dev_release(struct device *dev)1 Z# T& o# o- o
{
( l) b. M7 {# h9 c};
* e5 O* R: W3 X6 A. ~9 x, o" U* J7 u& X
static struct platform_device da850_evm_tl_leds_device = {" X5 ^9 M. B: ~- H4 ]; c4 ]
.name = "leds-gpio",
' C6 O- _% F* }$ Q1 D: h .id = 1,7 s. D/ ^; ^: V& [) O
.dev = {
; [$ C2 i6 V O9 Q0 d9 j .platform_data = &da850_evm_tl_leds_pdata,! D4 Q8 }2 a% h, l1 Q/ f6 V+ l
.release = led_dev_release,/ X- A: @. a3 a H" ?$ S
}& I3 J8 |( U# O4 H- `
};3 M, F% ] C' M* |$ h
7 \0 l+ Y5 s, H- J" w7 jstatic int __init led_platform_init(void)
, y4 s6 z+ ~! _& ]6 j( g/ Q; ~{! S" `: c3 I% T7 K7 i7 S/ ~
int ret;; L, i! H# b- S" L5 a) m
#if 0/ K4 m( S# s0 e7 i4 G
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 @) F" V P+ f% o- ]/ @5 P1 M if (ret), \/ N, K. N3 c8 ~$ o1 {4 n
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 x$ l3 h4 }. V1 b* ]! q
"%d\n", ret);% V Z! A! |8 `; B
#endif
; Y4 M/ D3 j" a ret = platform_device_register(&da850_evm_tl_leds_device);8 f7 q3 R- t6 E/ e) ^% ~* z
if (ret)" X7 q3 X. W) y) ~" s9 w, E
pr_warning("Could not register som GPIO expander LEDS");
; n! s" m* O' X" q% m( ? else
3 D! I" o% i, _2 l printk(KERN_INFO "LED register sucessful!\n");# `- L* |( g* ^9 m# u* F
/ ^3 z8 r* Q ^0 V+ u
return ret;2 i1 X3 `5 r# v6 x3 a
}5 f, m( f: i) W
y; _ _$ U, W% `& x% W" a5 q
static void __exit led_platform_exit(void)
5 q" F) f6 n$ d, N0 D{
3 q! ^" V6 r# O platform_device_unregister(&da850_evm_tl_leds_device);+ @0 v1 G# ?. _
+ t& p) r/ \9 [' B. }4 R printk(KERN_INFO "LED unregister!\n"); n/ w5 F \, F9 [& I9 A: C
}/ F: X. E* @ m0 }5 ~
) ]/ A" O g6 f# ]; N( Kmodule_init(led_platform_init);
, [. e- H: G# i" C0 ~module_exit(led_platform_exit);3 A2 u. b8 F" n- g
( {, p8 {+ J: W1 d9 N* ~
MODULE_DESCRIPTION("Led platform driver");
* k$ F- i/ C1 z" z6 W1 b8 GMODULE_AUTHOR("Tronlong");
4 C7 S5 o& h! K% |) G; UMODULE_LICENSE("GPL");
( W( c# u. x: o0 F, n, z
- L8 N/ L, n# y; l- } |
|