|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. C, r" B! g: j6 F1 b$ z
#include <linux/init.h>
. j( z) G. z' i7 `) Q7 a; A#include <linux/module.h>
+ R6 d7 H0 N7 Z7 b( v3 g2 o#include <linux/kernel.h>2 }, V4 S0 p! I% d5 [ ^
#include <linux/types.h>
; N1 T; }/ z) |. o) {5 I; h#include <linux/gpio.h>) v' E; n$ o, v2 E
#include <linux/leds.h>, |& C' U' I) G: f
#include <linux/platform_device.h>
( B. i4 A R& v, e- u1 O
/ M& |, \) t- m' @$ U# }#include <asm/mach-types.h>/ H8 p7 U* B- w3 T$ t5 S
#include <asm/mach/arch.h>
, F. T1 |8 V8 ~$ F% y& P#include <mach/da8xx.h>
7 u4 p% n& R4 w#include <mach/mux.h>7 h6 o8 n" v( K
6 w% W. W7 b4 [8 [7 P m
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* Y. e5 k/ q# O# K: e: L
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 f* U- J# E7 N, H#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! K, o. W* W3 A#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), A& P4 Q7 {7 u$ L' I
+ L/ U( m7 g% W9 i7 F6 @" T) c/* assign the tl som board LED-GPIOs*/ K1 o' }5 [$ i ~, g2 [8 |
static const short da850_evm_tl_user_led_pins[] = {; L* p* P' w6 ?0 ~( l
/* These pins are definition at <mach/mux.h> file */
8 H# V, A4 ^; L; x* a DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 A& v9 p7 K$ g9 x% M" t -1
3 w/ h! t5 v, n4 [3 d; h$ ]! P" i};
' H( t: w z' Q E: z* y: y& f# Z1 a0 {9 \2 W
static struct gpio_led da850_evm_tl_leds[] = {
0 o0 Z5 |5 k! x& |0 T* z" r {; ]7 _0 m/ [ h# d1 ^- x
.active_low = 0,: v5 w8 Z; P" i5 H0 O; x
.gpio = DA850_USER_LED0, P+ `! G7 S# l5 e, N5 H
.name = "user_led0",
) ~5 r8 _2 L, S% I5 [ .default_trigger = "default-on",% D# [* [. W7 [' B/ V7 Z1 `- }
},
5 I2 g' f9 w g- | [& ?# c; x {' n/ l2 c* E$ n3 a. }
.active_low = 0,
5 k! Y1 F' \) i( |& K# p0 _ .gpio = DA850_USER_LED1,
1 ]$ j& v1 A3 ^% k .name = "user_led1",
$ k9 X+ i( b! _0 T .default_trigger = "default-on",
# ? M6 D, m5 C6 h: t \& N5 i7 F },
6 x1 f- s8 G. j% a% v {5 k8 Q3 k. v1 O7 ? d, k
.active_low = 0,
; B7 f2 L' ~ C6 P q8 ]1 f. O& K8 ` x .gpio = DA850_USER_LED2,
" z) @5 A- w8 i4 g, i, b! q .name = "user_led2",
+ T3 E) s9 o9 W' ]: B8 O9 ^ .default_trigger = "default-on",! B2 `0 ]8 C: Y" r8 _
},
2 z* C" j" N: |# {% | {* C/ j+ z7 q9 Y5 H4 y) G
.active_low = 0,1 k4 l+ Q$ y* X% T* u* T
.gpio = DA850_USER_LED3,
$ _" @# [7 [( d& L .name = "user_led3",: u8 j5 Y( \9 V+ n8 m
.default_trigger = "default-on",: B" x/ l$ G3 Y9 D+ |
},9 X, T; Y0 B( s; p% {5 V
};# {+ n+ k4 N! S/ ]- G
* D1 c- d( A, G, E" k- T, R
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, w7 d& w, N) k9 O( f# N) g T7 s .leds = da850_evm_tl_leds,
4 D7 T. y7 F3 c; U. t .num_leds = ARRAY_SIZE(da850_evm_tl_leds),% S( h6 r! c4 c8 G/ S
};- [( Q# s- v# V
8 m9 J; a- Z& h. j- ?
static void led_dev_release(struct device *dev)
) ^$ `2 l0 [+ E2 i{
& p9 P8 w" r4 n" p" e ]) h- X};. ?* y) W! R. u) z9 D
. E+ i9 w9 J" I* ]" s8 U2 bstatic struct platform_device da850_evm_tl_leds_device = {0 s' \- V# X) v; a. k8 x+ ~2 {7 ?! n
.name = "leds-gpio",
7 Q* f: ?) P. ^, |4 i .id = 1,
: @6 k p3 `* G7 M .dev = {
) F6 ]8 b+ ^( f% k; `8 e; a' e .platform_data = &da850_evm_tl_leds_pdata,& [' L; ?, d* ~
.release = led_dev_release,
4 w- N: Z* z1 K6 D; k" J! e$ M0 j }
6 t8 m4 a- b7 j+ f};+ [9 `; W+ Y1 O7 C
, P1 _) F3 g$ R1 o& ^5 y
static int __init led_platform_init(void); Q8 H" _0 k; Z$ k5 h1 f) a
{3 _/ P2 t7 y# B
int ret;% ]) F/ a3 h% o+ _2 ^! L
#if 0
: w# E% q s/ p4 |+ d ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 o( r; H) l+ t3 O9 K: } if (ret)
( d' A3 ^" W( R. R+ d: j pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- d3 Y! s$ y: s/ v
"%d\n", ret);
" l' a+ n8 O4 v2 U5 L* d#endif. z2 o4 H x! G
ret = platform_device_register(&da850_evm_tl_leds_device);
# w7 m$ e* C& B# V, u' ]9 I9 S if (ret)
5 R$ V' W4 P& `+ R a" C2 K pr_warning("Could not register som GPIO expander LEDS");
* X" P1 ~2 y) {/ F% F7 m* U' N else2 k# @7 z' b' L8 @3 P
printk(KERN_INFO "LED register sucessful!\n");
3 |- o* n! p+ o4 k1 \0 ~. s9 n; ~
# C$ ?$ a9 I" K: @: Y% | return ret;
! W6 M* p! g+ J}8 J4 O. X! R3 f, s. F" ]' {6 e
& s2 Z5 X5 q- nstatic void __exit led_platform_exit(void)
# P9 A5 ]6 r8 ?: b1 T. K& t{
3 \9 q1 T1 e- @7 v# v% a1 G& j; c platform_device_unregister(&da850_evm_tl_leds_device);- M" X5 l8 Q3 p
2 S1 ^0 g6 b; H0 ]- s2 Z3 h printk(KERN_INFO "LED unregister!\n");# ^7 Z; V( R% J: L* {& \" o, A# u
}
; {# S1 \& X6 i; C, A0 P" m$ n
- N O5 d% P, x7 {/ h$ p" ymodule_init(led_platform_init);" C, M* `6 C, A, ~( T
module_exit(led_platform_exit);6 N' I/ L% f7 a! z* G, b' n+ W
+ T, N5 w7 z& e, e- {0 pMODULE_DESCRIPTION("Led platform driver");
& v; y M- a- V& ZMODULE_AUTHOR("Tronlong");$ [4 e" ^, r2 W
MODULE_LICENSE("GPL");
( T) ^* |" k; Q! u8 v. V/ F" Q8 O) g. g" W b/ N C
|
|