|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* V1 h( o2 Z7 F: o2 T* p
#include <linux/init.h>+ e! `$ s) L4 K% R8 |
#include <linux/module.h>3 ]9 ?# Z6 r$ `1 `" z7 `& \
#include <linux/kernel.h>5 u- O; c% f/ \
#include <linux/types.h>2 F7 b! L- l# u- } |$ Q
#include <linux/gpio.h>9 @. c3 `! J ?! {- k9 W. N
#include <linux/leds.h>' Q9 u% M% a* n+ X% X
#include <linux/platform_device.h>4 w- k; h- g7 k* d
A+ V x" y* ~; G#include <asm/mach-types.h>
3 I$ y, B: f& u! M# [#include <asm/mach/arch.h>+ m' g v0 x0 f4 v: r/ _
#include <mach/da8xx.h>
5 ^ e4 j2 `( x ]# x#include <mach/mux.h>
# I* W9 X- d2 [" m" c
* F* j" q. i( m! L, p6 E# N#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
x' l+ u- @ ?: x A2 o- Z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' m5 x/ y4 V; e9 \ r" l#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 Q ?: E: m) |+ F
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ ^" T Y. e$ _: o7 @/ ?# P8 V( ?2 r. W# p6 A( E
/* assign the tl som board LED-GPIOs*/
' f8 u3 r* F S* C. ustatic const short da850_evm_tl_user_led_pins[] = {
+ d3 P, Z6 I! q /* These pins are definition at <mach/mux.h> file */
* i# P: ~$ }+ } G DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' y1 p' [0 X% G+ E -1
* y) w8 A8 T% w6 h. f( j O};
- [( D1 I) v% [+ x) v
$ D* Y8 J3 o4 p) Z1 a ]% Pstatic struct gpio_led da850_evm_tl_leds[] = {9 H: g0 ^2 e$ z4 b; j
{
" P( v0 F$ `: Z6 m" v8 H .active_low = 0,4 @! p* ^, n4 J/ n+ i" }& [
.gpio = DA850_USER_LED0,3 a0 y+ k, p$ Y0 ~2 A
.name = "user_led0",
0 V9 G, O# K$ ^& l4 o6 Y .default_trigger = "default-on",* b. e4 Q1 Z+ N' U+ }
},! |, l; T/ a( g. _* G: r9 n
{# Z T, B, S! M& T* a9 W" V
.active_low = 0,: ]0 y D7 y$ Q: o6 ~# D6 {7 K w( O
.gpio = DA850_USER_LED1,- q( d0 a T( Y0 h
.name = "user_led1",- Z- i' e- A, a( |) x1 a! u E, Y
.default_trigger = "default-on",
7 {+ |5 F$ k. J. m& r s },
" Q. Y/ ~) l- N! _$ A$ F: } {! s4 u l# @+ H7 n" U6 \9 x
.active_low = 0,- H& U: O, y) P5 p, b6 |0 e
.gpio = DA850_USER_LED2,
' F9 n$ x3 n8 q5 r& N .name = "user_led2",: r; U" [) ], J u
.default_trigger = "default-on",
2 d3 O9 _$ C* \- M7 J5 @6 Q' o },
1 w* ?1 W) o, Q6 @( v, b+ N( `' J" h {
' J: ]3 w6 H% H6 q: n5 n8 { .active_low = 0,9 p: z3 k. T1 u
.gpio = DA850_USER_LED3,0 l. D/ a* M2 J' c2 R/ Z# z( N
.name = "user_led3",
1 T2 q$ z% w1 Y5 ~6 u4 d .default_trigger = "default-on",1 |$ ^ m, u) r8 ]
},
5 ?7 `: J: Y. l' ]9 ~6 L7 c$ _# y. U7 ~};
2 ^% V0 g' t' W
3 _; x: ~8 @5 k& L' ~9 U! I' N# gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 I7 h ^5 L! |2 f9 P! b& l
.leds = da850_evm_tl_leds,; |- i# j- d+ X# ~, Z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds)," L, k: x# n- M( n7 _. M5 ]* o, s
};
}- [$ e1 `1 |! e h5 X* a/ @5 u
) b, \- E) l. ^static void led_dev_release(struct device *dev)
# c, s7 w! }6 m0 n3 E{1 f9 C3 E( B: G4 x
};
8 q8 x h" Q N" r/ `% \) m$ k6 C$ U$ I T1 M1 T+ _$ v4 k
static struct platform_device da850_evm_tl_leds_device = {
6 u1 e/ @$ v7 z, @& P# b) V/ J( d .name = "leds-gpio",( B' W* ?- D- {- h' A
.id = 1,! i1 j/ @" v; p4 |( ^+ G2 y
.dev = {
8 ?: V+ R! c' ~) ~7 } .platform_data = &da850_evm_tl_leds_pdata,5 }4 X- E) _+ \. d' c
.release = led_dev_release,
; O! |# t6 \/ I }9 d# O- {+ k$ a
};+ {% }, l6 s. |+ C
) C, C& t: z- }9 s
static int __init led_platform_init(void)% }0 p4 M$ d! _/ ~, h7 j
{
- |" }- K3 W' n# B5 \" E9 L int ret;) o- W4 p/ T4 ~7 @+ h9 J
#if 0
7 ?% V+ k: L7 u ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 l; y. a5 q$ t8 ^ if (ret)
" a% Z8 }3 S( z) @& K% T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, Q O) R% x+ W. z; _2 x "%d\n", ret);
3 I* \* W- t! K& l; V, B#endif
* b& t# v4 `# y ret = platform_device_register(&da850_evm_tl_leds_device);
7 C4 N2 W# T$ q" j6 { if (ret)# J1 D; W4 M5 d
pr_warning("Could not register som GPIO expander LEDS");
U) T4 r( q' X3 c" c' y E; X else
+ I. C) F8 m/ V5 k. u1 Z' s6 j printk(KERN_INFO "LED register sucessful!\n");+ g: w6 E8 @! {) d
9 M! [& ]/ `2 Y" B" {$ G; s7 H0 j( \! R return ret;! f/ k5 I, b3 K4 Z
}( q/ {9 _5 C+ U/ s/ A
; z5 k# i8 t+ h1 S3 X7 A+ v4 jstatic void __exit led_platform_exit(void)$ ~$ O! ?: V% _: o+ {" J8 `7 z( w
{) H: W! O/ l+ r
platform_device_unregister(&da850_evm_tl_leds_device);# A& b6 m- t* L
6 ~ W1 _/ Z# O/ P9 D! p
printk(KERN_INFO "LED unregister!\n");. b: {* r6 D. `/ { r
}
# \7 w, a# B/ y$ q( R' r" D: i* O0 c" j! W7 b& T7 I* f" W; e
module_init(led_platform_init);+ E" P: a: A S( F G2 j
module_exit(led_platform_exit);7 N4 [! m" n: E8 X4 w2 g
: \/ q, O+ h" j5 wMODULE_DESCRIPTION("Led platform driver");
" r+ M& O3 J2 C7 G# S8 O" K: {MODULE_AUTHOR("Tronlong");
7 [9 ?' {. j3 `5 {$ u8 \4 ]6 ^MODULE_LICENSE("GPL");7 G1 r1 O# t& K/ G3 w7 @
1 t6 N' p$ w ^5 J( ?5 \
|
|