|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& A! C* u$ [. z9 A% w# Q
#include <linux/init.h>- g* [% v. m6 Q6 P0 S; r
#include <linux/module.h>
' S& I& S+ K. }+ D. X3 x) T: Q1 p#include <linux/kernel.h>( ~- l% c0 o: w" v3 {8 F* q
#include <linux/types.h>
" \ R4 Z" ?3 L7 S#include <linux/gpio.h> x# E" [# j7 u4 d* Y/ g- n) G4 c
#include <linux/leds.h>
% T; Z% \* @+ d) C' L4 B1 f#include <linux/platform_device.h>1 E# f" N7 Y6 U5 ^
5 {: A: ]7 |) H
#include <asm/mach-types.h>
. W- h" C5 q. E#include <asm/mach/arch.h>& D. ~, ?" e6 \7 Q
#include <mach/da8xx.h>
* b9 C' b6 C) Y( ?, _; Z#include <mach/mux.h>/ y( R; \8 w0 Q1 s4 f" L* T. h
+ ]* s' q+ j) Q0 ^' x/ J
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 I5 ?: k& V: o9 j0 [
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! _6 A3 I3 n2 M7 @7 E' }8 r5 G2 g% |
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). M1 f0 l& F) K
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( k; e+ g8 k7 i; o* G# i- A! ~9 P7 C
/* assign the tl som board LED-GPIOs*/
0 R! `, ?/ j5 I# G0 Zstatic const short da850_evm_tl_user_led_pins[] = {. F$ n u6 N: e
/* These pins are definition at <mach/mux.h> file */
+ N- B! E: ?. z8 ^' `: \ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 p$ Q* Y5 E; b2 X -1
1 O1 l+ J' ^) |" e9 d};* O/ v; ~" m& n
& {/ o1 C& u+ U/ a" Q0 estatic struct gpio_led da850_evm_tl_leds[] = {& U, c; C7 o4 g* X
{2 O* F5 ?2 \+ \: [8 [; I
.active_low = 0,
+ J# p% Q/ z G .gpio = DA850_USER_LED0,
; G* O7 n; }. V# I0 d+ R .name = "user_led0",! \! B& P9 H" ]( V* S
.default_trigger = "default-on",
9 p( O' Y( p# R1 i0 l+ u },
# l/ z% M6 F; Y9 o) o0 M( i* B {
& s1 ]! w9 [1 Q/ R; e1 h: ` .active_low = 0,9 p- J/ E7 j, c' w4 A
.gpio = DA850_USER_LED1,
9 |' f; x5 F) i! l5 i) y. d4 X; x .name = "user_led1",/ I* h3 D0 w0 H. b
.default_trigger = "default-on",$ C M3 T. c5 F% s' a; t6 I8 K
},
. g& Z0 `$ M& ` {
; m5 g- M2 @, ~% d) d1 t$ Q0 I& h .active_low = 0,: j* ]! H2 w0 E1 i; y4 F2 n# I
.gpio = DA850_USER_LED2,/ j0 f5 A9 b* S) \- j& m
.name = "user_led2",
$ n+ f5 B# |, g, ]1 v5 l2 m$ S .default_trigger = "default-on",
' ]1 H/ P8 U, i },9 `' H7 g( ^ ~ _
{
% P" H* `& h1 b0 m5 N .active_low = 0,
! g$ a8 j' W: l4 s .gpio = DA850_USER_LED3,
/ H0 ?8 u3 p+ W& M! t) q' ? .name = "user_led3",
/ a' O% v& m, S; v# d+ R .default_trigger = "default-on",9 Y w j7 D: ~- P; ~. D+ |
}, z( z5 v/ L; s
};& C; i7 _$ S4 y; W' g
- Q; M: l) p) S0 }/ |static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ J& f- \$ f, E F( a .leds = da850_evm_tl_leds,
6 v/ Y/ C! j7 x7 G E5 ~* ^) @ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 I" N4 H9 \: \/ j
};$ O6 t. R& @# d) x' W/ G
" `' v; k6 D+ R- z% M3 ]# Lstatic void led_dev_release(struct device *dev)
8 U$ [" O5 D5 C0 `{
3 Q* k5 W+ X4 f3 A U};) x6 K4 C1 j4 [6 D; ~
* E/ |" L1 `+ b1 s) d. C
static struct platform_device da850_evm_tl_leds_device = {: Y+ O) v+ G3 i8 y
.name = "leds-gpio",
+ O3 |2 H* f( X$ c+ Y .id = 1,/ `7 s; }$ h- z/ V1 r
.dev = {+ n$ `: ~& _1 n4 n) ~
.platform_data = &da850_evm_tl_leds_pdata,
8 ] c7 B8 {- p9 M0 b2 }/ U .release = led_dev_release,' |8 K h0 I4 S
}2 h7 I% ^$ I3 i8 }4 Q d3 J
};
+ Y9 I6 k! j3 C8 y
& Z- V f- a% m2 L6 S. Hstatic int __init led_platform_init(void)$ G5 k. f6 i. H
{( P) [' J- S7 c+ Z# H
int ret;
4 s6 k$ k' z, b: B#if 08 Q) g2 X* m" `6 t7 w* c% w9 d
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, J+ {' ~# [/ I1 d7 e" Q if (ret)
. I/ | e' ]0 o pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 W9 l N' L+ g1 @
"%d\n", ret);
. {8 w4 y: z7 Y, b/ m/ ]#endif8 B7 o/ y0 T% Z
ret = platform_device_register(&da850_evm_tl_leds_device);" ^. K$ h) R/ Q1 g0 u
if (ret)
; ?/ w* s; w) y* ^4 m8 A: q; G pr_warning("Could not register som GPIO expander LEDS");
7 Y1 a, z: v; R$ X& z4 U% ^8 z else
4 g& F x- } F1 ? printk(KERN_INFO "LED register sucessful!\n");
! P* z1 @- r; z" e" \/ w U% l) n0 _2 A' S, N: y! G: o+ |- ]$ Z
return ret;
, z. O! Y/ p" ` j4 B}1 V7 g- i0 z+ u% z# Q
( A3 B$ H# ]5 s5 U) D4 G5 o
static void __exit led_platform_exit(void)
9 |3 z) q2 T Y' V0 V# S{% g* g* B ?( o
platform_device_unregister(&da850_evm_tl_leds_device);% o0 W& K# P% X8 n! M u j' H
# H8 k/ a3 M# P. T) m$ W printk(KERN_INFO "LED unregister!\n");
# Y" a; S. E: |}$ I+ g2 u+ I/ G" T6 O
& `9 F$ H: Y: I9 \& smodule_init(led_platform_init);5 ^" z' {0 D, R0 C* G) K: b' W3 i2 l; [
module_exit(led_platform_exit);
! |" Q+ K# K$ m [# X J
0 B4 U5 U) x2 A4 ~1 {* bMODULE_DESCRIPTION("Led platform driver");
X3 A* q2 e4 c1 p8 A- L* l' G1 B8 gMODULE_AUTHOR("Tronlong");4 I: t: w6 a% |5 U2 E) ]: b
MODULE_LICENSE("GPL");
0 }: z+ ~% ^; L2 E* y; J% f* D( e; j6 Z( E% r+ p
|
|