|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' Q4 A5 ]7 K- I! ~% a0 i$ Y+ Z#include <linux/init.h>% q a, G8 g/ o) @% Y! r8 q
#include <linux/module.h>
N+ ^3 o2 n3 ?! t7 U#include <linux/kernel.h>
$ \! s) G8 Z( Q2 ]1 D% p#include <linux/types.h>
7 t) c0 P1 `2 K$ f4 O/ ]: B#include <linux/gpio.h>
& t" w" ^1 ?( s4 \#include <linux/leds.h>* C. @. P4 `; D8 H$ Z, Y _
#include <linux/platform_device.h>
6 N7 U/ m& k3 r2 J: Q! a* m" g
+ m! d7 T* b% B# `#include <asm/mach-types.h>3 J: }# [+ ]% f- e! y
#include <asm/mach/arch.h>( F, {: u; X* v2 }" ^( b
#include <mach/da8xx.h>* I) c" v& p4 i' k7 T( b
#include <mach/mux.h>9 i8 s' R1 ]6 @
( g, T! y1 c* M* u' Y9 S& t5 A#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 ?' W4 M- l. w4 J8 i3 N2 y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 @! {0 n( A. n9 e
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 ^8 ]+ n f; f% V#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 w- E, L; k d2 _
3 A; O* Y$ H4 R" _# j/* assign the tl som board LED-GPIOs*/
. |6 P% o' M+ o- ~; [4 Rstatic const short da850_evm_tl_user_led_pins[] = {
: j3 G% @0 u; r+ X5 S; _ /* These pins are definition at <mach/mux.h> file */
5 p: J5 O& B) c! W" F; _$ f DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ E( W6 g6 P$ o1 O& v C) B- W+ l. g -1
7 X% K. I$ ^% @5 d};
9 Q% A" D- a% A: F/ C2 H8 ?0 S$ C1 L! `% f# t
static struct gpio_led da850_evm_tl_leds[] = {
# ?" @6 @, s( e( t; L: U$ r {
. X# K0 _8 k- L" } .active_low = 0,# c6 E \5 o8 s/ M" s0 }
.gpio = DA850_USER_LED0,$ @4 c' n6 Z! f: o+ h
.name = "user_led0"," i h7 H" j# z3 `( i
.default_trigger = "default-on",( v7 i% l# R+ Q w% d: v4 g
},7 B8 Q" r0 q" x6 B4 E( b; R
{- E% D- H. n/ V3 R
.active_low = 0,
# O0 X4 X+ }6 x5 }! c( q/ k) b% x1 } .gpio = DA850_USER_LED1,
$ w6 B3 v8 P9 u/ ] .name = "user_led1",
6 t7 q8 e2 Q# S1 S2 N8 { .default_trigger = "default-on",
/ W- Y$ w5 ^' P( M0 h },
* R3 ~! L' i- g% K- A& L' U$ c& p {2 D1 O3 b8 v1 O, a/ E3 x
.active_low = 0,1 W0 Q4 K& P- h; G4 e
.gpio = DA850_USER_LED2,
& e" V8 q J' y$ E$ s2 c .name = "user_led2",
P' ^8 v. q/ ^8 a# l2 \ .default_trigger = "default-on",
- E" u$ r2 t U# Y: b) r2 S },4 i# O" |# k3 ~0 M3 D
{& E4 S* E1 |, c; b2 a
.active_low = 0,+ R5 u4 D1 K% X- Q8 j6 g; t
.gpio = DA850_USER_LED3,
+ H% c. ~: n$ F& l .name = "user_led3",0 z7 R5 @5 I# |8 f
.default_trigger = "default-on"," L$ V* [0 n% ]& z( {& s9 ~
},& ^4 G$ a# v5 f& d
};
0 s2 Z) G) {6 H& l3 K8 u6 c( P4 f; y$ F4 g% u4 J
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 E6 ]# A+ F9 {$ w& A
.leds = da850_evm_tl_leds,
* B+ N0 B; Y3 E4 X, H( S .num_leds = ARRAY_SIZE(da850_evm_tl_leds)," n2 h# ^* C4 y$ Y" p
};2 c7 I* S% _* T0 u; d& |
) }( c ?) G0 |; Y4 e
static void led_dev_release(struct device *dev)+ W7 O, a7 T- t* ~
{
- Z0 v: |* f4 a) m};
+ w+ f0 G, ~0 ~, g* u- u
) G% D: Y2 k- |6 c; N! Ostatic struct platform_device da850_evm_tl_leds_device = {
$ K& Q+ A5 Y: h- a: \% X5 Y. [; F( B .name = "leds-gpio",4 A$ {# U- t! K3 W
.id = 1,# {1 Q+ t ^' E5 D* h5 F# y) q
.dev = {
+ t8 C6 H* a' w1 T9 W3 Y5 d4 k! C .platform_data = &da850_evm_tl_leds_pdata,
! I% X1 A0 W, j+ h2 W0 ~( ^ .release = led_dev_release,
2 k& f' L3 T: k. x+ T- R }
0 d) o1 d" F# H/ V+ G5 g- z};+ A. @, H' i& M
' I5 j2 m2 ?0 f( N% W0 U
static int __init led_platform_init(void)5 B& d4 i2 @. v. Q, P
{$ n0 o0 l: c7 B7 z! l
int ret;
" Y! D' \5 q4 Q6 d/ R#if 08 e3 _. G j6 H4 X' r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; C s0 [% }* }4 T( z% b. d if (ret)
) ?, r6 r7 W) \% [- `) A9 T4 m pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- d4 J. ~0 m. s2 u "%d\n", ret);
# O$ z P) a3 G, E7 u8 c. E9 K#endif
' [# ?& l7 d: o# a ret = platform_device_register(&da850_evm_tl_leds_device);
( D& {9 X7 U0 z+ p if (ret)
% [# ~* B* s2 ~8 [) \: P pr_warning("Could not register som GPIO expander LEDS");" q& _- ~8 L' w
else% j" `) e$ g: R3 W
printk(KERN_INFO "LED register sucessful!\n");1 W1 m) l2 [: Z' Q" }8 H
6 m, i0 S% O% o" t. E( z return ret;1 E' {+ U% l; I$ X
}( n- G. K9 J, g' g0 W
/ }1 E0 F$ m0 p1 _
static void __exit led_platform_exit(void); N' W- w9 F1 y: }& r" `
{
' x c/ T9 @& T5 k p7 X platform_device_unregister(&da850_evm_tl_leds_device);% m5 C' R- T b4 @& A; s
1 l1 \# i2 S3 X- E4 M/ i! T) r
printk(KERN_INFO "LED unregister!\n");
) S# X0 m: |' G4 Y0 a. O6 G0 {}9 j, @& u- `6 L4 o
# d+ }6 T+ F' v: l7 \4 Wmodule_init(led_platform_init);* }/ P3 _4 {9 @# v Q" e( u
module_exit(led_platform_exit);# X3 |( q# d+ P! d% ^0 Q1 x
5 \# {; f' c g9 r6 h# D! o
MODULE_DESCRIPTION("Led platform driver");! {, U# ]4 l: ]
MODULE_AUTHOR("Tronlong");
/ n) \- F% B- TMODULE_LICENSE("GPL");7 R/ l& i; b `, g: \! K
7 z2 k# u/ u- ^, y
|
|