|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 f& {$ v; o0 l3 ]2 Q
#include <linux/init.h>
8 o! e7 H! J) l7 V- [; [6 Y7 G#include <linux/module.h>
8 h, `) B9 J, V5 t8 R0 h#include <linux/kernel.h>. m1 E; K8 p4 ?, a
#include <linux/types.h>0 i3 a0 d9 y8 y" L; y1 u
#include <linux/gpio.h>% c9 J7 k( X& s) k: C. H+ M: s/ g6 N
#include <linux/leds.h>: I2 n$ X. F) E4 M
#include <linux/platform_device.h>
% g1 M/ Y6 s# T: d, v1 t) N- y. E/ F7 N
; J$ t2 _3 e$ D. e- _/ z, e8 o% U# f#include <asm/mach-types.h>
2 Z6 }; g" s- _; ~) e#include <asm/mach/arch.h>
7 l4 @& h. |: s7 Q5 E/ l#include <mach/da8xx.h>5 z/ E" \! }; b
#include <mach/mux.h> K; C8 n# _& h- q, z: ` z0 T
) i$ J5 R/ N6 Z) j#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 K/ \' |$ h8 Z* G( l#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): B; f9 O+ A0 V7 d; u. v- Q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), t3 D3 p4 `; |6 L, ~2 ?, z- h
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). H* T7 M2 A5 C* A
! ?# \6 t% l+ K+ e3 _ J/* assign the tl som board LED-GPIOs*/8 Z. v; Y! K; Q6 u
static const short da850_evm_tl_user_led_pins[] = {
! M; E: I1 o! B, [; J /* These pins are definition at <mach/mux.h> file */
0 X. [: k2 S/ S/ p4 x DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. l( y- B3 B. w- \/ Y) y( J -1$ z2 M$ w! k9 P( |$ `' O! _
};! P% A _8 g& l f. f
$ _, b* s' f8 q$ A/ e5 H0 v, ostatic struct gpio_led da850_evm_tl_leds[] = {
1 m4 ]6 [% `5 B. P {) o* b. E+ k5 K- n5 w
.active_low = 0,; [* D8 ]) y& D- J; q
.gpio = DA850_USER_LED0,1 \- R3 h& p- F; K: d9 \$ K
.name = "user_led0",0 `5 a! u: M7 Q4 \8 L1 T# l
.default_trigger = "default-on",7 C" s2 T6 `1 C: b4 ?& h
},2 x; p. n- B' S7 a9 ?
{
8 c) m; q1 l- y) g# Y .active_low = 0,
) F' S- T1 r5 {' F1 L) V" a .gpio = DA850_USER_LED1,
' A* `. ^& e5 d! z, J .name = "user_led1",
9 Z+ G6 U8 }- q* @, r .default_trigger = "default-on",
; m1 b! E1 {6 C/ l3 c9 q, d },* k* I- y/ W- P3 j: m2 K- ~
{* ?; u3 @3 D) [' v1 }: ^5 p8 ^! F
.active_low = 0,
" R) }$ z1 A3 n+ A' j, ` .gpio = DA850_USER_LED2,
* w- _+ R3 ]( K2 q3 L; R% X .name = "user_led2",
7 c* H- p0 E, o0 r( D) W .default_trigger = "default-on",
' b7 O6 g4 L+ B+ t/ g },. A# s. H) y' C5 w
{
v) F% z/ r5 k. }9 E2 A .active_low = 0,
* m2 t5 q B8 u% u0 r% r! [# B .gpio = DA850_USER_LED3,
# t$ T3 F' I2 M/ U2 I. c .name = "user_led3",
: G1 A9 j1 L: H$ B6 z .default_trigger = "default-on",
9 ? S) T4 M* f0 ~0 ^- d },
/ H3 i- q: Y6 i3 K. C7 v};
7 F+ N& p/ ?2 C4 |2 B
; n' b( ^ |6 a5 C9 `static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 u- e* l) A4 C$ `5 R" X4 F" L .leds = da850_evm_tl_leds,
6 R; ]/ C1 |0 k/ o' P .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. s' F/ ]# f& J9 I};
3 U: n1 n% Q# J2 j# |9 \ n4 ]
5 v* E% Y# ?* Y1 Zstatic void led_dev_release(struct device *dev)6 Z/ \- O2 e3 }0 a8 ^
{
! l% V; G6 o( S; n};* T' `( w! d6 y
6 [! d5 y4 u5 _1 f8 G$ { c( R
static struct platform_device da850_evm_tl_leds_device = {5 j G1 B k! {- `
.name = "leds-gpio",' k3 g# i( Z, o6 i& k
.id = 1,, g7 T+ U( H; G2 d' W1 _
.dev = {
) c6 ^, j& B- ]5 @- [ .platform_data = &da850_evm_tl_leds_pdata,( h9 w4 z U1 z* {# J" Z# M
.release = led_dev_release,
3 W: e; s8 A1 ]% U! i) v }
; P, c; J- Y r% R+ _};
3 ~, H9 J" Z( l
4 y5 x0 g( Y T9 c% Mstatic int __init led_platform_init(void)
. T9 o5 w+ c; x9 w{
: W5 a' M. v* Z6 s: w# B" {' ] int ret;
" N9 A, E8 ]" S- c2 K8 S# l#if 0
; O& r% ?* y0 o" c0 y- M ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 Q. T* v: ~0 f1 l if (ret)
; q1 g" V# a( ~ z, }1 h8 B1 R0 D pr_warning("da850_evm_tl_leds_init : User LED mux failed :". Z8 c* [0 W9 l0 N
"%d\n", ret);
4 O, j6 r( B! q9 I9 y1 t9 v3 B#endif
* ]6 ^2 ^" `$ E: i ret = platform_device_register(&da850_evm_tl_leds_device);
; Q4 ]% {8 n2 i$ U if (ret)
6 f% D0 W' n$ R( s1 F b4 }/ @ pr_warning("Could not register som GPIO expander LEDS");
: j: I5 F8 S0 o( u( E& c! G else
8 q, r1 A$ R( } printk(KERN_INFO "LED register sucessful!\n");
" E/ F% g$ T3 `& B0 h- z$ i& l
return ret;
2 ^. ^$ G# V, Q0 u9 c% D3 r}" e. L1 [8 N; c6 _3 Q
/ x8 j4 h) L* N8 q% z: X
static void __exit led_platform_exit(void)
2 D+ [6 B# i! O0 u; [% {( j{
) i; e; B* n; t* v6 a7 u5 H platform_device_unregister(&da850_evm_tl_leds_device);
' h/ |! m6 @: F8 ?; R1 G6 q" b: ?" L0 z o9 S# w# y6 w
printk(KERN_INFO "LED unregister!\n");+ O2 G4 \* F: ~
}1 g# |0 I; {7 i) B
* [' W9 V9 r+ D3 ?8 W% I# c6 J3 wmodule_init(led_platform_init);# B* Z, j0 z9 P. o$ ~( L1 W
module_exit(led_platform_exit);
4 X7 f* J" E4 {' W$ d. B2 j) |4 A. {2 G2 Y7 u
MODULE_DESCRIPTION("Led platform driver");
, N: b- ]/ G& M- `, F! \MODULE_AUTHOR("Tronlong");
; Q9 e! ~% b8 l8 b, Z# AMODULE_LICENSE("GPL");8 e3 T- R0 l5 \) l$ p
V4 S0 p( z7 T% P% ^6 O
|
|