|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& I. j% Y$ [. D
#include <linux/init.h>
9 p2 |. \8 Y8 M6 M: ~% O#include <linux/module.h>/ Y1 ?7 e! z' }% `3 ?
#include <linux/kernel.h>5 Z9 D9 b# M0 g5 g# R
#include <linux/types.h>
% Y4 i; D; Q* u& L( q4 a4 X#include <linux/gpio.h>2 F# L# R. X$ C9 v
#include <linux/leds.h>
2 u5 v: b) d/ a/ Y#include <linux/platform_device.h>
3 J- U5 ?* s4 v
; s3 z# s$ c; ~1 R+ N2 G#include <asm/mach-types.h>
, _& H% x# u: P& z#include <asm/mach/arch.h>4 J# v; T' b& B9 Q/ u1 d
#include <mach/da8xx.h>5 L7 g* M! l5 u; ]5 |
#include <mach/mux.h># B5 @$ n' E/ V/ h. b4 p
% {4 m! x( Q- y; T( S- \
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). f& [9 ]! v& S3 Y0 C2 q a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ G. j- I1 A. X% e* J) o8 O2 q! N#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' O i6 C" M7 M( m5 g#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( [1 I# f' O/ _1 A# z( _4 Y; v$ W3 k; K' Y; U7 P+ l; v+ ?
/* assign the tl som board LED-GPIOs*/
) o' H9 _ J: _9 c: [+ @static const short da850_evm_tl_user_led_pins[] = {
$ F6 ?+ R- K8 v, u /* These pins are definition at <mach/mux.h> file */, q2 S5 H: F% f" d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 h+ I+ o9 N- f' t+ g/ o -1" g' O- W3 g6 I
};4 B& w f4 |2 Q4 K% v; o
" D- r5 k4 U* u; ^" r, nstatic struct gpio_led da850_evm_tl_leds[] = {. [+ H( x( J, [3 f, E+ P
{* A/ Y" M, O& f0 s5 i; N; t! Y
.active_low = 0,6 ]$ [2 r7 X1 D, ~
.gpio = DA850_USER_LED0,
1 _5 G/ l$ q( P, d# U .name = "user_led0",
5 w# J" B8 U+ [( U" h8 x .default_trigger = "default-on",) ?5 S2 C2 n. N* S& @" y3 c
},% t5 v6 _& m" `$ N
{
- C2 D6 c ?, L0 ]- r .active_low = 0,
' e3 H3 O$ U0 B% [; ]) u# r .gpio = DA850_USER_LED1, s, [) o* W1 ]9 D, r% g
.name = "user_led1",
7 E& l2 O8 L6 b3 W+ p, {5 C: K; O4 y% I .default_trigger = "default-on",
6 r( d7 L2 h9 Z1 p! T }," T% w, H1 e8 `' v; m: j7 {' }, g
{
! C+ i4 k2 b( ~& W) X3 @+ u3 w5 r .active_low = 0,
& d9 {$ @8 q+ j4 N8 P% s .gpio = DA850_USER_LED2,
9 E; q, B& z3 G7 l n, o5 M$ L .name = "user_led2",/ A3 o# H9 z+ {' ~/ h
.default_trigger = "default-on",
6 U! ?; m7 ^* v; b# O },
% k; c! R! b' V* g+ p( ~7 c; ]$ R { L/ U" R2 M+ A5 K8 |8 k5 O8 Q
.active_low = 0,
; ?+ q* }5 W, A2 s f6 A .gpio = DA850_USER_LED3,; |* m. K6 _& v: Z3 P
.name = "user_led3",
6 ?# r3 m( z6 P: q+ h .default_trigger = "default-on",7 `0 S- n- ?! e& r) M& f
},9 @0 _/ \% d4 ~8 V9 ~1 b
};! @4 A. [; O5 W5 D
/ S: n! l, w m" z* U
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; \& s5 F) e8 p' c6 Q/ d+ @% E .leds = da850_evm_tl_leds,
# b7 b) f& f: @- ?" @ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
: p) }, q9 O3 D* K+ w% h( V# B};
. ~5 P; Y0 q! I8 u& M
! A7 v. R6 _2 U, y6 t1 ~static void led_dev_release(struct device *dev)" j# v m, G+ V6 l' ?
{! V9 H. J2 D! J3 }2 f1 k; f8 |
};
F1 ~% C: o+ `, O1 W
& R; J2 X5 X3 N1 j) p2 Bstatic struct platform_device da850_evm_tl_leds_device = {
6 h9 ^4 o4 r! c .name = "leds-gpio",' j4 F. x9 n2 u d. y
.id = 1,' z& C5 I" x+ t+ |2 c
.dev = {
7 B* n9 e) f; b7 a .platform_data = &da850_evm_tl_leds_pdata,
5 S; x7 E; U" ^ .release = led_dev_release,
" @6 r5 L7 z+ P8 A" j }
' b7 ]; d( z. f2 k: Y3 D) ?};
4 e$ D. M2 d7 Y) x9 d' ~9 j$ z9 f6 Z g& u1 i
static int __init led_platform_init(void)
9 r) h8 C* Y& B* E9 U: N# ], G7 d% i{
# ?- W0 K4 i: t int ret;5 M8 j" e& X" B( [
#if 05 ?8 n6 S' o3 D4 T( g/ q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 U0 [# b; ~: k3 `" d/ ?. R+ q if (ret)
' q4 \- Q" f- s( {! C$ C pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 P) I1 s' b5 o. E4 |2 l2 r/ j
"%d\n", ret);3 l/ V: Q3 O1 T! h
#endif
! V- Q8 b: r0 o* ?1 B* h ret = platform_device_register(&da850_evm_tl_leds_device);" {8 `1 c1 F- d) L/ `- M
if (ret); m5 ^1 [4 Y1 u: h! |
pr_warning("Could not register som GPIO expander LEDS");% v* k Z5 S0 P+ A: c- s5 M
else
( _7 g" e; N: f6 v2 e printk(KERN_INFO "LED register sucessful!\n");
8 h( D( M4 l. L N% e
9 ]2 {/ K( B2 A; c6 ]! I* @ return ret;
" a1 j$ h* X1 F. g}) v* l! e$ B. q
2 j' F. J% N$ _/ `( Pstatic void __exit led_platform_exit(void)7 I; k" n7 l' [% [0 |
{
0 h5 X9 ~( L7 L+ S/ S/ p platform_device_unregister(&da850_evm_tl_leds_device);
' c+ z. F. S, w2 k
9 r) [9 I: b/ N7 K/ [# S( o' u' ? printk(KERN_INFO "LED unregister!\n");) b; H _. ^ u# n5 B; O# d
}7 s! L1 u; ]$ M4 W8 T
8 D7 T" x5 N8 |: ?* r
module_init(led_platform_init);0 b# T* p t( I, K O! h0 t$ b7 y
module_exit(led_platform_exit);/ J% i8 x4 t' _7 _4 C4 E
7 Q$ J1 c! \' T: |$ L- p: I9 ~
MODULE_DESCRIPTION("Led platform driver");
6 n) S" [0 d9 K) p- }9 bMODULE_AUTHOR("Tronlong");
- p6 q \( [/ {& T$ |( LMODULE_LICENSE("GPL");
; f% f9 B+ C9 b6 }4 R3 T+ w. i4 h! p8 s9 X& o- y* V" g7 f3 k
|
|