|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! {2 P% m' I5 E% }' _1 a: r) T
#include <linux/init.h>1 Q- U- y- K; I; j! d8 \) v5 }$ X
#include <linux/module.h>
9 |/ m( J9 ?# S* X#include <linux/kernel.h>
2 C" {: d& ?5 ~" s. g5 t9 s#include <linux/types.h>
, X1 f* Y7 f0 b3 u; D#include <linux/gpio.h> j3 a6 W& P2 L# o& p, f: ]) B% z$ v
#include <linux/leds.h>. N2 m, m6 R- I o3 [) ^
#include <linux/platform_device.h>
) o& q8 e: P! R) k+ P6 T' Y
t3 H5 K4 S/ p7 R+ I' M#include <asm/mach-types.h>& X, n) U* V- F. |2 s
#include <asm/mach/arch.h>! P+ `. |; w! c! g# x# M; `
#include <mach/da8xx.h>
* X1 \% X$ p' `# Z7 n9 U#include <mach/mux.h>
8 p- x4 o% W( J8 y, T4 z. {7 f3 E; L4 }7 ~0 E
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. C+ l- A: E' V8 G& X" P& D' I7 h#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% k7 Y p6 ?+ x2 w#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 U9 d- D$ |2 X/ |2 Z6 C1 o7 F
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 g6 V; p- Q; I' n/ A- l
: y0 l6 l: v7 s5 z/ Q
/* assign the tl som board LED-GPIOs*/
3 r. q# H- c1 E0 Ostatic const short da850_evm_tl_user_led_pins[] = {
: ?; _2 W, l4 ^' w6 K; J; B" p /* These pins are definition at <mach/mux.h> file */: D/ [2 W( B: {0 K9 F' [# X
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' h E, i: u9 t6 e* J% p/ h -1
( z$ z0 G( y& a7 Q# M6 \1 e3 n};( j: @1 o2 W. b
( R4 Y! E0 S% I. c5 m& q; o9 r4 Nstatic struct gpio_led da850_evm_tl_leds[] = {
2 M6 A) N) ^9 V/ t( u {- L5 O' G! K- b' j& _4 C
.active_low = 0,8 R7 l( S$ O8 w$ \/ D
.gpio = DA850_USER_LED0,
. d* c4 F' `( [ .name = "user_led0",+ S5 P/ i0 |( }6 }
.default_trigger = "default-on",, v. [7 _$ N7 ^/ Z/ `0 ?+ m
},
* j1 D/ w( M1 G$ G' Z1 W {9 e( @! S/ T. s2 }( D; p' g5 V
.active_low = 0,
$ x- ^5 }0 a! c: U! `- Y3 \ .gpio = DA850_USER_LED1,9 i/ P8 e7 s# t0 D, ~+ [5 N
.name = "user_led1",
[8 o0 w* x' F! |* Z1 O( { .default_trigger = "default-on",
0 }6 |0 l! ^' g1 v; ]- N. J },4 ^, T! {8 Q+ g/ e7 { q- J/ i7 y
{; s6 @$ [) y4 x. F8 D, t
.active_low = 0,* r( I5 L" ^! U. J
.gpio = DA850_USER_LED2,; @9 E; J2 J9 p) A4 K! w
.name = "user_led2",
; w. D" s/ ], b, m .default_trigger = "default-on",
6 L/ d- }* {8 G },3 L8 g6 t: W! _* _( ?0 v4 C
{
( `+ Y3 H: l7 Q t& A .active_low = 0,
2 H; y* K' S" v) _+ s0 B& u .gpio = DA850_USER_LED3,: i8 C$ S( W4 ^" d$ ^
.name = "user_led3",' S/ S" L' v& R# o1 I! c. s" N
.default_trigger = "default-on",9 k' R# S4 x" ^3 E# H" {
},
! z% t: ]' M3 O7 A5 c N};2 w- b" e+ m& k
A/ q+ l1 |2 m5 U1 h1 X3 v# Hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& D4 d) { Q, p# F; D
.leds = da850_evm_tl_leds,
2 S2 _; g7 c1 [7 { .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 L: L' w. {8 F4 s+ c) I# W};
6 P0 J3 L. |7 W2 X# ^$ R7 a& Q# ]7 t+ p" x v0 Q! M
static void led_dev_release(struct device *dev)% e. m0 I P$ M U( |" u
{
- I7 y) y1 }; J+ h. s};
$ A# P$ y8 x2 g' h( Z& i3 A8 f- l3 Y: _( z& z- M/ ]7 M9 s
static struct platform_device da850_evm_tl_leds_device = {
4 p m" b8 s4 G( P0 C5 ?) Z! K% B4 I4 v .name = "leds-gpio"," U& ^+ a8 N% L
.id = 1,2 r1 j7 Z+ q, @3 S
.dev = {
4 q1 [' L! c+ U% ]5 y& B .platform_data = &da850_evm_tl_leds_pdata,7 q5 h; e* [0 ?# @+ C* f
.release = led_dev_release,
5 B i* ]# B# B. R Q } X; ]8 x& {, U4 Q( L* O8 h
};
& g5 O" L4 e$ e: Y6 `4 h" G, p% T$ H4 s
static int __init led_platform_init(void)
2 o h' U( E; @/ L{
: i, V3 p# P9 r8 j } int ret;
6 A9 B" }) }2 Y( r, t2 W* t#if 0
: ?1 C" {8 u3 A% B. H ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. m4 C& W6 ?! \
if (ret)6 A! j" A2 d3 }
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# t" ~, _: C e. Y3 W. a "%d\n", ret);) O5 \# }0 z- v0 j# s
#endif. s' Y/ H7 o+ t0 u
ret = platform_device_register(&da850_evm_tl_leds_device);- b2 P. o# @/ U4 B3 }) z: L
if (ret)7 G6 l8 f8 M. _0 U
pr_warning("Could not register som GPIO expander LEDS");
, H# L: y" s; y. ^/ {( z# t G: W else3 c3 u1 B8 H/ ?/ i
printk(KERN_INFO "LED register sucessful!\n");" _1 K! h1 S h- ]6 g
1 t) p0 q: g4 `- \! g% _0 J6 Y
return ret;
5 }5 ?" I, o9 {% o3 y}
0 F+ ?6 w( R c5 D' N
$ r1 ~. N0 H$ B# h% c& `) l) Istatic void __exit led_platform_exit(void)" y' [8 E' } N
{
8 u r" e0 ]. d; t; R* g platform_device_unregister(&da850_evm_tl_leds_device); l; N" s6 W: K; Z5 ?
: ?2 d, d& K; B printk(KERN_INFO "LED unregister!\n");
/ }9 ~8 B5 r6 M4 R+ T: {, @& O}$ T6 D+ D" @" Q3 P
* W4 A+ r# l2 R B
module_init(led_platform_init);4 u- l* B) _$ E& n) j$ e$ v
module_exit(led_platform_exit);; m5 V& ]) {9 Y5 D i/ [/ p
5 a+ h9 ^6 Y. |/ `
MODULE_DESCRIPTION("Led platform driver");
4 z0 A$ c! I; wMODULE_AUTHOR("Tronlong");
0 G) r; V9 ~1 |, ?" b5 N" B: C' ]MODULE_LICENSE("GPL");3 Y* ?& O" E9 P6 t7 E; ~( D
6 z1 [9 D1 z7 E" c7 o- c) k. Q |
|