|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 w- m4 ^ ~+ N, Q4 L
#include <linux/init.h>
4 X& ?6 Z! ?# X3 V#include <linux/module.h>. a0 F! y0 v2 W0 _, n# ]5 S+ [
#include <linux/kernel.h>0 v+ ~. H0 Q& z* I
#include <linux/types.h>
$ M- h% _! Q' Z @#include <linux/gpio.h>
( B9 h _/ s1 O#include <linux/leds.h>0 `" V0 e6 Z/ Z
#include <linux/platform_device.h>! J, s) {* V; c& h
; C: p3 }& x: U$ f- r#include <asm/mach-types.h> R1 R" O' f$ |2 G, S( Y/ E
#include <asm/mach/arch.h>( i! a9 g3 f% V3 i) z5 @
#include <mach/da8xx.h>
7 E' Z4 ?7 [. m/ r#include <mach/mux.h>
0 B0 I* l$ A6 B0 t% d
7 H' ]5 T& }, r! Z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0), F. |7 T9 q' k3 Q. h5 x! C
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 M% e8 x" L6 A$ q: l0 M( x, N' E#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 D. f$ m# @2 c9 q, P$ A1 G#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% `9 r+ h% ^! R! Q- X1 M* T
8 F! F6 d' |5 v. e; }* ^" h/* assign the tl som board LED-GPIOs*/
( |) w; I v( h; r istatic const short da850_evm_tl_user_led_pins[] = {
O& ]" k& f( w- U' i1 J+ ^* x /* These pins are definition at <mach/mux.h> file */
$ n3 p5 i' ^- e5 l- `% h DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- C4 x T n+ U6 C. W7 v2 w# O1 A2 O
-1+ {" u; \9 J1 w+ o, U5 i2 y
};
; A/ v. `* \9 v s+ y. M! h+ m+ ]
* t+ U' [0 r) R" ^static struct gpio_led da850_evm_tl_leds[] = {
6 x: b. G* ~, {- m. k, k+ o {
/ J* u0 ?) ]& a: q/ M, `% D .active_low = 0,
2 x3 }& C& z0 O .gpio = DA850_USER_LED0,# M7 L7 q. S1 m% ` n+ D, e
.name = "user_led0",
5 {) [0 u3 |( v5 g F+ H* s .default_trigger = "default-on",
* [ s( m! x# B9 d N' H },, b/ C$ B P u, e
{2 w" J9 H# X* j# v0 j. M# b
.active_low = 0,
/ {2 k! ^" y, \2 Y4 s( ^ .gpio = DA850_USER_LED1,
1 X6 R, G% V% r5 [$ k- z8 N .name = "user_led1",% e. }0 `9 [) k$ |
.default_trigger = "default-on",
( G: S5 n2 Q- q o2 ~) v+ a },
2 N: T$ \* w3 t1 @% I/ h {; L8 `' V# v5 Q
.active_low = 0,
: W/ S8 a4 h3 m% N .gpio = DA850_USER_LED2,, m" Q/ U; L+ G2 g6 f4 v8 G+ R+ I
.name = "user_led2",
, i! N8 m7 m( `/ e6 A .default_trigger = "default-on",* }/ B# A- h6 P+ Y8 M1 l: ?
},( z& u7 Z1 v. v6 i
{
0 T0 K; {$ C2 a7 X/ U. q .active_low = 0,
6 r" v' n- Q1 ~5 x .gpio = DA850_USER_LED3,
5 C+ _8 ]+ O7 v$ s( m# H .name = "user_led3",9 d' n! k8 @; g2 _9 x
.default_trigger = "default-on",
% x3 [& o8 s- X },
6 J0 Z! W2 t0 x2 u2 _4 P1 R};
* N, p5 S: ~* H' G5 c5 _+ ^# X1 ~* n% I! V- v
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& P* [7 r' s _3 ?3 a( K
.leds = da850_evm_tl_leds,
% I) j+ C b/ U. j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),* x5 z0 H+ e3 D
}; J3 ~1 K% D9 k
; }6 r5 q4 I3 F c! T" b. h# Fstatic void led_dev_release(struct device *dev)) j6 G; t7 P, d0 `8 k6 t/ Q0 K$ ]
{
& t3 M( \# ]; H};1 r8 d+ t6 ?! F2 r4 G2 i
- B6 L8 ?2 T1 S( R: f( d' w7 L8 ?4 ?
static struct platform_device da850_evm_tl_leds_device = {1 w5 \: O& y, u6 U/ E
.name = "leds-gpio",2 N. h$ b3 i) V# V" A
.id = 1,
8 z0 v' m3 e! Z, Y% f, ?7 ? .dev = {- Z8 y8 K5 o- p: |9 o& c
.platform_data = &da850_evm_tl_leds_pdata,; g: z5 F% C, \. }. y0 p) |
.release = led_dev_release, G3 `. {! o# s/ s% ~
}
1 q. W1 d+ e) T" F% H};3 u5 x2 x4 q" R
. n4 Y I; `% a" ~
static int __init led_platform_init(void)! |9 \1 n0 t6 z% M
{+ [# U. S3 @, v
int ret;1 `2 Z! W) ]: E) l/ {7 `
#if 0! \, l5 w6 G @
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 Z, f( e# M# F+ @. i1 W( k
if (ret)
* D6 m/ [- c! w; L! ^5 e pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; g# O- O) n' A: i5 ^4 i5 J u "%d\n", ret);
' g! U$ e3 R) P' _( d4 {) z#endif6 f* b$ e" C6 X0 c
ret = platform_device_register(&da850_evm_tl_leds_device);+ |) G3 Z: }4 o) \" b
if (ret). M" f( N1 B! Q! V5 G( F
pr_warning("Could not register som GPIO expander LEDS");/ z$ K9 [6 A' s- ]0 R' H1 h! k2 t( D
else2 l7 }; g: b" f0 b1 B
printk(KERN_INFO "LED register sucessful!\n");# B1 O/ u6 Q3 t" V% z8 E5 p* ~5 s
/ O" M2 x j; r& C! ]; T
return ret;
( ~ O" }# {/ e9 C4 O `' ^- U}
# W( k4 ^$ j: N0 C* v# o1 U& Z8 q T B0 F0 _% G1 [
static void __exit led_platform_exit(void)
) z* u& d& ]0 I: \" z( d9 [{
0 r4 z9 ~3 j4 o6 ]' } platform_device_unregister(&da850_evm_tl_leds_device);$ ^/ ?1 z5 M0 p* |% b
L. d6 Z' r/ q3 y& N printk(KERN_INFO "LED unregister!\n");5 x& a( y( P! n& W; a
}
) Y' S. \* u; Q# Y' F- X! ~' m# Y# q
module_init(led_platform_init);8 B p( Q, s# Y1 F4 h+ E
module_exit(led_platform_exit);* v, |8 a( i- b9 ?
6 l, m+ n {& ~* HMODULE_DESCRIPTION("Led platform driver");
. S; k% U) Q. Z& v& oMODULE_AUTHOR("Tronlong");7 M, z4 @+ x2 N- [3 ?/ ^% h8 w8 }
MODULE_LICENSE("GPL"); I2 X$ [6 I; f/ M2 ~8 J
8 e( }& R& U$ M" T |
|