|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, ]; W/ d3 p: V: U% z! q+ a6 h#include <linux/init.h>
; _$ r' ~; _) P: @8 B#include <linux/module.h>% k5 @& u# E; w: X! X
#include <linux/kernel.h>% N4 z$ D$ v% x7 U
#include <linux/types.h># m' m/ M% v4 d0 n
#include <linux/gpio.h>5 a' B9 ^0 L# M+ c5 T
#include <linux/leds.h>
% I% I5 ? `# s#include <linux/platform_device.h>! ?1 G5 I5 r# \3 W9 `
+ M8 Y( E7 ~. Q9 |
#include <asm/mach-types.h>
- }0 |2 U* S. Y3 N4 H. |7 \#include <asm/mach/arch.h>
4 i( U1 [& `" h) r' @#include <mach/da8xx.h>2 Y$ {3 m, T% d7 R1 L/ V2 p
#include <mach/mux.h>
* d0 k* c2 b) P- T
c$ Q! D8 X( s* I# J: \) M' |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ M' U* }! n" }3 q4 j# K3 a. z" C#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* t& p7 B8 d. G9 U# p#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ q) N' ~+ U, }, D: x#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, X8 O) ^2 y% c1 N1 y4 h7 Q7 [1 Q/ f) \
/* assign the tl som board LED-GPIOs*/. t' z* }& ~5 E( ^, m% x3 Q9 N
static const short da850_evm_tl_user_led_pins[] = {
# M9 p# |, ?$ | ]* T6 }$ _8 ` /* These pins are definition at <mach/mux.h> file */
! n) |# f" H, g) ~$ y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 l% u% O1 {+ N# A7 n6 q, i8 U! C) u- i -1
/ P r& u, ~9 P2 h2 Q};9 }$ z! |$ @6 N+ @9 D O% c. P1 U) o
. o$ y+ s& ]) Z' n I
static struct gpio_led da850_evm_tl_leds[] = {
( H! O+ T2 J/ x {
5 _# ^- S' L$ R5 W _4 p9 M .active_low = 0,
1 |' ^5 _- P0 O% t$ N4 K .gpio = DA850_USER_LED0,+ j: x% x- f& w, k% q
.name = "user_led0",, x6 e3 B9 k2 s
.default_trigger = "default-on",. V& {% \9 A4 W( \$ g' E `
},+ g9 ]4 J" E% t3 Q$ X
{
! k1 z- D* O$ C: _ .active_low = 0,8 C4 A ~7 q. p1 d
.gpio = DA850_USER_LED1,. j3 o" ~" t }' F
.name = "user_led1",
- F" l& s9 U) Z5 b- ^ .default_trigger = "default-on",# Y/ `; J$ o2 N0 z5 p
},' w. T( W, n9 S1 w" b5 f
{3 T: n$ Q: Q. c4 G. X( | z) d A
.active_low = 0,
, Y) S% h4 F2 ~/ p .gpio = DA850_USER_LED2,6 D" x( d3 n0 _9 q$ u* p
.name = "user_led2",% R8 e* G# B- X4 E. ^
.default_trigger = "default-on",
- j, d! u4 y% s) x4 Z# i },2 D! G/ i- Q% A; ?
{
# N, V( B1 e8 S }) k. _ .active_low = 0,8 {2 k$ x& |0 ^
.gpio = DA850_USER_LED3,
4 I8 A; ~3 A3 F1 D" m9 M .name = "user_led3",
7 d0 H% Y- d) x% | .default_trigger = "default-on"," c6 _% k% H, K/ d, g
},. a5 z( T6 t7 P) F) w$ k
};
# G' W$ U3 m, J1 j0 |
! C# z5 k$ q- e* k. ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 p) U; H6 h4 K* n+ j& I3 g) m% P .leds = da850_evm_tl_leds,- C4 {$ I0 @. M. ]% t1 j* `' S
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 i- U) W: x! H0 x( O};9 _3 I% D' A5 N" g* G& D
( U, e% v0 u. Y
static void led_dev_release(struct device *dev)
1 Q; Z4 `2 j2 V) X9 {{
1 I, D& f# E& C};4 e Z' P C1 U
; A s0 \# i- `6 l* {static struct platform_device da850_evm_tl_leds_device = {1 T7 F& D' e1 t0 u: l1 s' d, v) J6 e+ B
.name = "leds-gpio",: a6 b: x( V6 P" C
.id = 1,5 @3 U, \- g7 b; D9 U5 _; W8 {
.dev = {
1 t* f8 c0 G& H, Q; G$ E .platform_data = &da850_evm_tl_leds_pdata,$ K3 Y. P( x- z/ g A
.release = led_dev_release,
, i2 M+ M9 a/ o: } }( U( v2 {' f/ T$ ~. ^( H# D' ~
};' u3 v8 _# M6 n
n% K$ O) V6 j( u7 n J
static int __init led_platform_init(void)% S6 Q& N! j: K: A5 k% Y
{
0 \" ^7 c# m; b& x( Y: m# {. a/ E4 j3 D int ret;
' V5 I; } b* {#if 0
7 A! }' ^) e* l& k5 \& d ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 f0 }/ `2 x4 Y
if (ret)
1 ~( N2 t4 M% e- Q; i1 p2 Q$ T& l pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- E# e' B3 f2 R& f- G& _
"%d\n", ret);! N5 c6 q; _& \ a
#endif
+ d' x( q" z l2 b ret = platform_device_register(&da850_evm_tl_leds_device);7 \! y& @/ v) y& R9 y
if (ret)4 Z' m" I' `5 I6 R! k
pr_warning("Could not register som GPIO expander LEDS");
& T' I+ B( K' M' R, B% M else( ]* u& h v' S% R: t) ^
printk(KERN_INFO "LED register sucessful!\n");
! Z/ W" C8 r! ~3 J' k, T9 s
/ F1 U/ u% r. { return ret;
6 |& ]; z$ k9 K. V# M}2 F! G; ^7 y1 W' H( y. K: u
' _' Q5 Z8 h6 ?4 ustatic void __exit led_platform_exit(void)
% p4 X V# T4 A) B6 I{
1 c; M0 }& [* C5 G2 o platform_device_unregister(&da850_evm_tl_leds_device);. g% d! g& R, [* E& V+ p
& `( x9 C1 ~% x printk(KERN_INFO "LED unregister!\n");
- Y( C: w5 P! l" N}8 A$ g y" S. K) W1 T8 x" p+ c
. T* Q& Y! r: Z- d7 Y$ K G
module_init(led_platform_init);
# i% P2 V4 d/ T3 i* [module_exit(led_platform_exit);5 K# n5 g _4 @3 e* @: G$ t7 f* P
9 N8 ~& c% }3 B6 p$ k- l- [MODULE_DESCRIPTION("Led platform driver");, ?# {9 l0 y- `/ ^+ ?7 w" C# \
MODULE_AUTHOR("Tronlong");/ n; w- t2 k8 j5 H9 n/ e0 q, E
MODULE_LICENSE("GPL");
% u! p% Q( g6 l% t& e2 `
X" r4 T& h3 s/ s( b) F |
|