|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! ~: ~. f% v! {#include <linux/init.h>
$ P$ ~. D3 {# E#include <linux/module.h>
& z1 j1 y/ F6 R, b! `8 T#include <linux/kernel.h>2 j, |0 a8 D" R/ D- E; y, s
#include <linux/types.h>
0 x9 z2 V1 [/ e6 B( n#include <linux/gpio.h>3 r" W* x' P9 v/ Q+ ~
#include <linux/leds.h>
" U# f# U4 ]5 D5 r$ R/ q9 P3 @#include <linux/platform_device.h>/ h- P a |, d* h w
/ v& U6 }5 o% B#include <asm/mach-types.h>
) W' K7 P9 Q- F% s. Y2 x#include <asm/mach/arch.h>% X0 o4 B7 d* k/ f" U
#include <mach/da8xx.h>
& `# n& Q! {; y* b' R#include <mach/mux.h>
7 A% a2 K P, n, N) c* J9 r2 C" R7 O( Q' [5 ^# S
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, w7 H$ g0 @/ q' _7 u#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)" g( u* R" n" p2 K8 k
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ W) ^7 d" c( B& u4 z; C2 I; m#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
Z- I) c- H1 l: K6 w/ x( B" ]6 {: I; _" \7 S
/* assign the tl som board LED-GPIOs*/
, r( V9 x# ^( bstatic const short da850_evm_tl_user_led_pins[] = {7 G0 v+ K5 \2 r. U. ]8 p
/* These pins are definition at <mach/mux.h> file */
4 d' w! g9 b8 Y" Q1 Y2 k+ L" | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) R( `) e! o" L3 F -11 `- S* S+ i: {6 B6 H/ V+ U
};0 ?0 |# X- f! D5 k0 ]; j
+ ]4 ?3 K q" P) Q
static struct gpio_led da850_evm_tl_leds[] = {
2 h2 Q0 I- p$ O1 ^ {
8 b9 N) E* n* d7 W: v .active_low = 0,; W7 d. |& v! l# X" {$ k% L
.gpio = DA850_USER_LED0," [" w8 Y6 `7 e0 Y9 {, k- |5 ~% {: V5 g
.name = "user_led0",1 R5 v2 X# D' W/ b' L1 `2 J( Y
.default_trigger = "default-on",
* e# } X7 W2 K$ F5 }# h) s* C },
7 r8 g4 Q8 @( l) ^ {7 z$ T# u, ~4 T. M. B: k+ J7 v: \
.active_low = 0,
, q1 O% m; M* q. Y( S4 H2 J+ l8 ]) C .gpio = DA850_USER_LED1,
. t: L; P# L n .name = "user_led1",
+ r# c* n' o5 p3 \ .default_trigger = "default-on",
$ i3 N& h# f/ R* e+ j },
$ B3 K4 b0 c. ]+ J4 q* s/ g/ { {
q/ [0 k: v' z- l1 K; t5 \; z .active_low = 0,
4 N& V6 ^+ `# g .gpio = DA850_USER_LED2,
9 P5 m2 g2 n3 U7 L .name = "user_led2",
7 }; M, J \0 a .default_trigger = "default-on",
$ E) Y; U& l% L+ k' L },2 X3 _* o, g y1 O
{& B. V# T( A! ]" o( B
.active_low = 0,; G& `- U- S$ K1 c
.gpio = DA850_USER_LED3,7 ]; O" m$ `% m& l T
.name = "user_led3",
' a( m* H) A' k .default_trigger = "default-on",& ^6 F+ U. d# F2 l+ F2 O
},, t; G7 u0 \: E0 k7 g
};3 t1 {1 K3 {4 a6 w; e$ S
, ~- @) [ _1 e) [/ s6 S7 |static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! Y# }3 C- |( G& Y5 l( q( g
.leds = da850_evm_tl_leds,
3 @& D1 H2 S, E' D; k& `) { .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- M8 F$ O" A% Z) t1 r1 G, C};, K/ s, k* G+ M
9 ]# C* N8 K1 q! M: r
static void led_dev_release(struct device *dev)
% Y! Q2 v; s" x ^! u) S% m{
! M& D/ f7 q# \2 ]9 R# Q& P4 ?};
0 G6 i# {6 M( n# f5 t' H3 L9 @# O" v
static struct platform_device da850_evm_tl_leds_device = {# t- \2 C9 ]$ X u( g
.name = "leds-gpio",2 {) J' z, w) u& B2 V+ m' @* v
.id = 1,
' N' g2 O7 J4 U, U" s- `% N .dev = {# @: e6 M* k) P& x+ K
.platform_data = &da850_evm_tl_leds_pdata,) M) P; S- M0 \! k+ b8 _
.release = led_dev_release,
. e. r7 u" L( d- l& r3 f, C }
! j7 a! B$ L1 ] Y! ?/ D};! G' j0 F! q+ P7 J* ]* x
! s i* x' s! K1 O$ u; u) `$ Dstatic int __init led_platform_init(void)
; H4 k4 c4 Q3 G{
/ O2 T/ g" R! z* O int ret;$ Y7 S* h5 n' s) s) D9 t3 b' X
#if 0
" e# c$ D( ?9 D d ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 |6 t. y6 S4 C! I9 g
if (ret)3 n1 U8 O: |, z# I9 a( W' N! C
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ o; K* P0 x# X- B$ m "%d\n", ret);" h7 ?7 w: h) D3 E, g+ b
#endif1 w E# u/ ?$ t" j/ W3 ~
ret = platform_device_register(&da850_evm_tl_leds_device);
+ p* d& [3 ~0 p8 G3 c$ J if (ret)" c- g; ~" _8 E- W
pr_warning("Could not register som GPIO expander LEDS");
6 `% v; E, y0 V2 S" ^! n2 ?% o else4 u5 R; {0 v, ~. V) y
printk(KERN_INFO "LED register sucessful!\n");. t1 u' P# T, ^* ]! K
. i) j4 @. { M
return ret;
1 r$ P# l/ }% K# N6 e- ?9 X3 \}( v, C9 n8 o9 n4 B! s {" Z
0 `4 o3 r. {, F2 ?& N
static void __exit led_platform_exit(void)0 [$ O% |3 X5 F0 S& G" i
{
' P6 @. Q# w, F# V, k. ^9 \% M$ |9 [ platform_device_unregister(&da850_evm_tl_leds_device);- Q. \4 l0 q# f2 [
$ p" G1 N9 k" }' b7 N) U printk(KERN_INFO "LED unregister!\n");
$ H7 X. a9 z! [9 P, ]. a( } i}4 a( h( X% I% M1 }
$ P: U& s3 K) A# e* Bmodule_init(led_platform_init);
2 [3 P# p: v2 F8 D. A$ f3 dmodule_exit(led_platform_exit);* M5 \) x1 }2 E5 E0 _. x0 S0 Z
; H2 S& X' Y. ?& h" O- CMODULE_DESCRIPTION("Led platform driver");# ?5 ]% O6 X" K s/ \0 z6 ?7 o! k
MODULE_AUTHOR("Tronlong");9 P. H: N' G+ j1 N3 J: A7 K$ o
MODULE_LICENSE("GPL");
5 s ~. t+ U4 T* Q. n f
, ^5 d1 s5 D* A1 L. F. K0 R) W |
|