|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 V4 C9 t2 w( q
#include <linux/init.h>
7 k6 x9 Y' X3 H" |4 g+ e2 ]#include <linux/module.h>* o: I0 j8 d* \2 S7 `, u
#include <linux/kernel.h>* H) `3 D9 B4 h- F$ T3 I( S2 Y
#include <linux/types.h>
& X6 S. g0 P3 z) f, f5 r# n$ c- C" @#include <linux/gpio.h>
2 [* S i, h) o; I/ |% t; j2 m#include <linux/leds.h>1 m6 K* \8 ^( ^ ?' Z2 N
#include <linux/platform_device.h>
; o) D! J+ l5 Q
T7 \5 J3 |7 k! ~ q* B/ L' y#include <asm/mach-types.h> e2 n/ S$ B1 ~$ d5 H& ]
#include <asm/mach/arch.h> U' l: ]: ]* w5 k1 N, W- C
#include <mach/da8xx.h>
$ C9 F, Q2 m6 F9 `/ j! l#include <mach/mux.h>
1 C* v' n4 ]/ O3 W2 i: F4 a9 a: T
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 y3 h# l7 z( t#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% E$ y+ J* }+ S$ E) y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 Z2 S/ v: p8 q# E4 e% N#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): i) N( n, ~4 _
( v9 X8 u0 `7 f
/* assign the tl som board LED-GPIOs*/; z2 p# A6 H9 G' n: A
static const short da850_evm_tl_user_led_pins[] = {& z. @, @- t& j) a, w7 V# ]
/* These pins are definition at <mach/mux.h> file */$ z) g+ Z8 c9 D, v: M# j
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( ]7 \4 k& n. F: \% a/ w
-1" [" e5 H6 R5 v' F4 r: R
};. `/ \+ t; o6 l3 c0 `: R
1 n& S% M! Y% H T5 r
static struct gpio_led da850_evm_tl_leds[] = {1 q/ ^, j- ?# @* h3 H! @
{
- b7 L3 H5 y' J6 _ .active_low = 0,
. [; Q" Z; X% k0 d, b/ X4 S .gpio = DA850_USER_LED0,
/ D/ j- O( h. Z, ]/ R- D, x( z# k8 e .name = "user_led0",
5 Y5 v% R# x6 U# `% f- G .default_trigger = "default-on",
( A- t" Y8 C9 X9 ~4 q- V9 P },; J# U" j# W2 |$ Z6 Q& L+ v- B
{
+ P+ o S) _ X .active_low = 0,/ J- q, U+ @* V ~/ z! l
.gpio = DA850_USER_LED1,, D; ~5 Y6 Q% q2 L" d. x% |
.name = "user_led1",
% J2 c1 H* t) [' D9 j" c .default_trigger = "default-on",6 k( u' }# U& ^6 D/ o+ S
},! m& L Q5 e F/ w' n
{+ x( m D+ x1 X+ N3 N7 F* J" Z
.active_low = 0,
r9 o: R' h% L( Q8 h* K; `% G .gpio = DA850_USER_LED2,
4 B, U# B1 _, k9 X5 \0 P .name = "user_led2",
) e' w' f4 c/ O. S .default_trigger = "default-on",. y1 m J" v/ L& O
},* o: {; V% r) e, D" M% @# a# ~3 m
{
3 m' ]+ _' }- L# Q9 a/ ?$ ^; | .active_low = 0,1 u; g2 x1 d' c# b5 ~8 k( }* f; c
.gpio = DA850_USER_LED3, I8 p3 J6 }4 n4 C& D0 ?
.name = "user_led3",
* r6 l8 S9 S1 f# g .default_trigger = "default-on",
$ j f. P5 j( `3 J+ r! t# o },
/ Q6 u f; b( J6 H: |6 V7 N; O};
" U- ?8 h$ P9 X2 s2 f
! t% X8 u5 q3 j* e1 p4 C+ ?% |9 ^static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. M; q! k6 Q. m+ l$ [/ T c' |
.leds = da850_evm_tl_leds,/ m3 y+ {8 k b, a; K" c# j0 T
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),- l0 V# i! _2 Q% t
};
$ A* L: u0 [& a3 D& K9 h. U9 K: p4 U# t" J8 p6 a
static void led_dev_release(struct device *dev)& s* }5 W1 b" F |8 b9 R+ A( Z0 R2 Z
{
. A4 n' M3 l6 B+ x$ T6 `};
' Y- l9 c. {9 D% t) t3 r, p" j7 ]' i- `( a" q6 a- m5 p6 t
static struct platform_device da850_evm_tl_leds_device = {: X& w4 m! @" I: ~
.name = "leds-gpio",
8 k' r* u$ a/ o) C n, s2 c0 Z .id = 1,
( B( q( a) R) l& ?9 f& F9 ` .dev = {
9 M5 N) L4 i$ Z( u .platform_data = &da850_evm_tl_leds_pdata,
. h6 T# }- a+ x .release = led_dev_release,
1 T) F- w, M' e$ Z' |. h }
* e0 s8 T) \( t7 o' z4 n- h1 R1 r7 d};
% ]6 [" ~3 V: ]
: L& D- w' F# ]: _9 W* Bstatic int __init led_platform_init(void)
5 q5 n" M" {/ v5 k. l* x% u* M{9 _1 b$ e! C# r, a L& T. Q
int ret;
5 z' _7 q: f7 ~. R/ ?* j#if 0
& X: }, B0 E" y1 T; f- c ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' X) i: i# t' w9 S, ?
if (ret)0 F& V0 v1 l1 b, |# g5 |" }
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 | W N$ {4 T3 `+ Q "%d\n", ret);* s9 V& l# d) ~- `9 B: T
#endif
# q8 M6 u) K) t ret = platform_device_register(&da850_evm_tl_leds_device);
* U8 M' J7 ]. V$ w/ V, W" ~# ~8 b0 Q if (ret), {0 K- K+ D- Y/ t$ R
pr_warning("Could not register som GPIO expander LEDS");
: ^! M. Z# U( o& l+ E else
3 L8 m2 L& ?, B& M2 { printk(KERN_INFO "LED register sucessful!\n");1 L) K2 P4 z7 m: P8 z
* j, q' K* z1 R) ~( D' } return ret;
; h0 |" T. ]' {}
h2 j* }* q* h8 @
4 C f, t! }' r& x! Z/ Istatic void __exit led_platform_exit(void), E* Y9 C: o/ J A( p( `- |* S: r
{ ?: z5 v( _9 ~4 `# B/ i' Y
platform_device_unregister(&da850_evm_tl_leds_device);6 _+ T& F3 y% k' F+ F
6 ]. |. e; Z" n- P( M printk(KERN_INFO "LED unregister!\n");
) G' G- k4 m4 ^# u+ [% f S}
' v: s4 z( `$ H1 ?/ _
5 ~' H9 l* e: I0 J1 S, O3 i, Pmodule_init(led_platform_init);: m' Y2 R) U% ^7 _( F( v6 h& M2 t
module_exit(led_platform_exit);
/ v8 K) V% ?5 }2 Y8 Z+ e) {( i4 a/ t% y) x# ^
MODULE_DESCRIPTION("Led platform driver");
) u7 z8 T3 G5 D0 M! OMODULE_AUTHOR("Tronlong");5 E# t/ m% i- G- G H! ~( C3 F; E
MODULE_LICENSE("GPL");
: Q) U$ a! @7 _+ M# [: X M% Q% e6 u' `/ N0 G
|
|