|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 h1 n% R: Z. f* [
#include <linux/init.h>
, L. [# A6 K& o& p) l#include <linux/module.h>& c! o( E F+ I
#include <linux/kernel.h>5 o3 ?' }& ^2 M( [
#include <linux/types.h>
+ o8 T% |) B9 ~; k; r) a9 e5 Y#include <linux/gpio.h>
; V" S& y. R P3 P3 e' c#include <linux/leds.h>6 @% ~1 T O0 G a, ^- i( w
#include <linux/platform_device.h>
9 w: n# ]# q" P( Z' ~ C+ ^8 q4 X7 t8 }4 o, M8 ]5 _0 L
#include <asm/mach-types.h>
4 E/ S$ U$ A6 {& }% C2 i5 Q' p+ w#include <asm/mach/arch.h>
0 x6 x1 \0 w M% u5 D; u) y @7 o#include <mach/da8xx.h>
, E+ P" a: r4 H) Q ^5 U% p#include <mach/mux.h>
/ _( M6 p) I8 U! m1 N! P1 S; e# ~5 C; G* r
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& @7 C( Y& b/ o) M" R#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 v% X, l/ h# O#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 r& d7 n0 `" B# v' j$ @/ E#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( @5 Q3 Y* t! d: E; C- J' s5 F
. M% \. m6 t' {) I( B$ I1 F- m
/* assign the tl som board LED-GPIOs*/
3 C9 L$ ^& s E+ m% _, mstatic const short da850_evm_tl_user_led_pins[] = {
& v' ^7 F1 H; G7 r /* These pins are definition at <mach/mux.h> file */
, G0 X5 Z, r! k+ k DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, ]/ C8 G: q# q1 ?0 J
-1# _- H% Y! V$ d$ [" B
};( k4 y& `) n& F: `
* V; c7 W2 x+ I4 p3 astatic struct gpio_led da850_evm_tl_leds[] = {% O( c, v C3 K* f1 O2 z- r, d* @
{+ q* S+ }: l4 o: f5 U
.active_low = 0,
8 d7 M0 R8 ^, O$ X5 S, s .gpio = DA850_USER_LED0,5 D' |; r0 n0 ~3 s5 ~4 p
.name = "user_led0",
4 A; B2 r! M7 f* i$ k7 o, ^( P .default_trigger = "default-on",
5 s- H/ |' U, J) P& e& G. R },$ K" N$ _; k8 O# N7 `
{
' o8 ^# p# Z$ `# ^ .active_low = 0,
6 r- ]$ q" H* j( J4 y1 n- c .gpio = DA850_USER_LED1,
+ R2 i4 ?) d' n% p* S* G/ U .name = "user_led1",
: c4 a$ _: i9 x6 v @) a .default_trigger = "default-on",
# _5 E( P/ p+ q1 L: Q& H) C! I },/ P: c4 x- P5 q3 O9 ~/ e& G2 U- b
{
! t5 ?2 ^7 o4 v0 c7 P M .active_low = 0,$ T- a) z6 ?6 ^ |# O
.gpio = DA850_USER_LED2,2 p9 l n# {% R! G6 \$ D# m% k
.name = "user_led2",! `& [- B4 G+ [
.default_trigger = "default-on",
/ V, T+ k+ i2 ]8 S1 @9 Q },
" ^ n a. p/ I6 Z, L, K- C {; C3 g* \" m1 ^) j3 C$ c
.active_low = 0,
* n& X. ]" O K; n F. R .gpio = DA850_USER_LED3,
. V& H/ u8 Q0 y, k3 b# C- g4 ] .name = "user_led3",
1 b! `# J3 z2 U4 ?0 s3 D! M .default_trigger = "default-on",
* R- C/ m! W1 O8 b },; p6 m* V2 W2 R' c$ H" M% b6 k
};& O6 b5 V% ]4 ]9 m3 p5 f3 f" L
0 x" v2 ^* e' ^4 S% fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( t Y. c4 _; Q
.leds = da850_evm_tl_leds,) b6 j3 L8 F8 L# r
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( N% v( ], ~7 ^ d) V/ M};
$ J4 t% T6 |0 R) Z7 S3 ?3 @/ [
1 G# q1 n% a$ \static void led_dev_release(struct device *dev)
" V" j0 K0 d! |" ]; N{
6 e3 u" K7 f! l+ T) M3 E};5 [2 g! `; F+ c% t- u4 Z
" E- N$ L. m U$ {: D
static struct platform_device da850_evm_tl_leds_device = {/ C E3 v0 F) u4 O" G& _
.name = "leds-gpio",) W, e$ }1 S5 S3 r1 l; C( [. i
.id = 1,
# v. @7 b. q" ^+ j .dev = {
7 S' e; \5 t% f+ ?4 ]5 H .platform_data = &da850_evm_tl_leds_pdata,
/ ?2 H- _& G0 B2 F% h .release = led_dev_release,% W5 x- H# {4 y6 K
}
7 W; j1 T. l; Q% x; H- d};
2 u, s2 A4 W6 {* ?9 r+ ]% y: R5 e) z) z+ E- V- k7 r1 N' {
static int __init led_platform_init(void)$ z: _9 l( M. s3 V
{
! K$ t5 e! R0 w7 G; ~ int ret;
. Q! A" f) B0 T* l" l7 M0 @. E; `#if 0
9 m; }$ z0 i k$ f+ U8 E& A ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
y, Q/ I- {# {2 c if (ret)
: M0 b9 Q" Y% A" f. m+ @1 S2 f/ X; ` pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
s. v) n# L( T5 f+ J5 {' T "%d\n", ret);) h1 m6 Y1 U. w& w T _/ S
#endif- S" v" I* p3 e3 e; C; |
ret = platform_device_register(&da850_evm_tl_leds_device);' R; }8 c, c) i- d) A \7 Q2 y- ?
if (ret)! R y; E. K% E1 Y" k8 [
pr_warning("Could not register som GPIO expander LEDS");
; O2 b. \6 x( n) p4 l! d# z else( }) o# w$ W x4 W
printk(KERN_INFO "LED register sucessful!\n");
) X8 v4 n7 ~' k6 V O: P$ J# ], d2 X# c
( c& G! e8 Q/ i$ {! C% ^ return ret;( \& d9 L8 G3 T
}) e# t0 ]" \# u) w# i2 h2 Y0 O$ S
" z7 {* a" x# I1 }; v, P5 {
static void __exit led_platform_exit(void)
/ M/ ^& l F$ S% D; `3 [{; t! @$ _9 `7 F' N
platform_device_unregister(&da850_evm_tl_leds_device);
- s: o! o9 S/ O" {3 ~4 t5 Y. d1 O* o! V: p( r( d
printk(KERN_INFO "LED unregister!\n");& {# \. h1 B) P z2 O( l4 t. T' i
}! v( I7 G4 g& Y5 K3 B& I
/ b4 L. d) X6 f) Y( [1 [
module_init(led_platform_init);
8 C! [- z$ @9 b3 y, Nmodule_exit(led_platform_exit);
4 J, M0 r" v' w2 [2 _: x$ M
# n& s7 T9 D# Z1 JMODULE_DESCRIPTION("Led platform driver");$ t; e' @; ? u5 \% E6 H# g
MODULE_AUTHOR("Tronlong");. }9 q# `1 F" a! s' {
MODULE_LICENSE("GPL");" E6 s/ R6 a, M
9 _( O: e6 N( N |
|