|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" I' L: _# Y( {3 w9 ~
#include <linux/init.h> F0 u$ ]1 m$ x% t
#include <linux/module.h>
" Q( B. c: {1 T e#include <linux/kernel.h>
( I4 r( p6 T: Q$ d6 f#include <linux/types.h>
6 G' s+ W1 P$ e+ P#include <linux/gpio.h>. U0 E; ^/ _4 ^0 D0 ` N6 q( n
#include <linux/leds.h>
5 |7 j& P- N4 ~# V#include <linux/platform_device.h>% D3 o5 B4 p3 W2 i4 I8 _
8 F; J5 o* _6 }
#include <asm/mach-types.h>% t9 @/ Y# X0 P+ X) ~/ J* F
#include <asm/mach/arch.h>
5 J6 D y$ h2 Q ?4 V#include <mach/da8xx.h>- ^% B! @& J* d! `8 v
#include <mach/mux.h>
" E; K- \1 v/ s0 D, R
, i' F9 r; Q- O9 g2 d$ V8 ~( R- l' ?#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ J' z0 u3 S7 ]7 j( H7 |3 I
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) i) i8 E! k, \" M" d6 q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 [- V6 D0 T* t* r0 k) G
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" g" U3 m, m% ] F
e5 T# @ O6 p- L
/* assign the tl som board LED-GPIOs*/+ g$ H* I* S1 Z' q
static const short da850_evm_tl_user_led_pins[] = {; t3 H4 c: G0 B; s
/* These pins are definition at <mach/mux.h> file */5 o. K1 M3 q; F8 e* J
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, ~7 s' D( E8 _* K8 `- h6 W7 @# L
-14 B' c# r: m3 ?2 @
};) \( _/ W: z( x# t( g( p3 D0 l
; O% c! K3 [( Z4 \8 T
static struct gpio_led da850_evm_tl_leds[] = {
9 G W9 f* Z! s {
" D5 i0 w# P+ N .active_low = 0,
% B `5 `! A% P+ `5 U- b- y .gpio = DA850_USER_LED0,: ~# C& T' f8 s" H
.name = "user_led0",
0 E9 j3 o4 t& u$ i1 {. W .default_trigger = "default-on",
4 K6 H# _( N* A% s" G1 c5 W: T },
8 O3 b" T* B, {- k; C: D* _: p {
% q, f7 R8 A- i; j( } .active_low = 0,
x+ ?6 V. w3 I& a5 |9 b/ [ .gpio = DA850_USER_LED1,- H; l) g1 U' B5 ^ _+ j5 g
.name = "user_led1",. X) E" i! m1 L3 _- `* \8 S( a- `
.default_trigger = "default-on",* X9 q- U/ a: K6 Y( k" \
},
" i- C( j- {3 d& t9 ~0 I# o0 D) s {
8 l" U5 q1 ^1 \8 Q/ {' Y .active_low = 0,, j9 r( K' b, @. l
.gpio = DA850_USER_LED2,
) q/ J( l6 Q8 t .name = "user_led2",! {, M9 n2 B7 W+ Z
.default_trigger = "default-on",
. {6 N0 o% s. z! L. }+ K },; e2 v5 ]: q- i3 ~5 r9 U: @ L
{( p# |9 A9 `5 `+ c7 a0 t7 [
.active_low = 0,
1 S% ^% D9 d% v- |' e7 [; L9 _ .gpio = DA850_USER_LED3,
8 a0 ^# w0 @! U0 _8 D8 W6 c; U .name = "user_led3",* _3 R; W, J' {5 x5 f
.default_trigger = "default-on",
7 p6 r' Z& ?6 j1 p% { },
, |* O0 _6 d' T. M* Y: g};
/ V3 U9 E, D- S4 h0 z2 w% |8 Y
- F# M2 V3 P* c8 ]static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& ]; N- n K5 ? .leds = da850_evm_tl_leds,$ n- V' K. A% Y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds), p3 D4 A+ b7 F$ _1 |
};$ F) p# D; x h0 y( }9 ?+ r
7 e: p5 E0 t% ^( [; Z- F
static void led_dev_release(struct device *dev)# |3 `. v5 k/ H" W1 u* P9 ^3 v
{
+ p* M! J( c6 Y1 J; Y& @9 u& D};9 q% H0 U) |, i0 O) v% L$ f
' ^0 |" P0 i/ @& {* D
static struct platform_device da850_evm_tl_leds_device = {, T" t! p6 B6 \
.name = "leds-gpio",# l. Q! y) g6 Z$ X+ g
.id = 1,# y, U7 k" f6 [
.dev = {% P( I& T2 p8 r2 q2 ~, E. _
.platform_data = &da850_evm_tl_leds_pdata,
( K- ?3 D2 i* y, t i. V% i .release = led_dev_release,
# ]4 l0 b( {% n, Y y3 q }& i0 y% `7 w& m; e& s: O9 u7 `
};
; K$ i3 X& l5 B0 S! r- M1 f9 X; @# a0 Y, A
static int __init led_platform_init(void)
# n) V. |6 o, r6 Z1 Q7 J{1 K( M+ L% ]+ e$ \8 y; _
int ret;
8 P x' \& `+ j8 p8 Y#if 0% s: R$ S7 L, ?* S/ j& v" s
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 I3 P& T6 f. u' f9 g1 ^* c4 [
if (ret)
4 r0 }7 Z h9 e pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 x9 Q4 @2 k- r
"%d\n", ret);
* Q' s& H8 ^, m* `+ s#endif6 _1 C8 E5 ^9 T6 M& ~
ret = platform_device_register(&da850_evm_tl_leds_device);& t7 J) M0 t C! a' }$ N4 s
if (ret)' B" U! M9 ^; d7 ]+ O" P3 S
pr_warning("Could not register som GPIO expander LEDS");
, A/ @$ X& v/ {- }. g' s+ Y0 N else
) U; F' B+ p8 _4 D printk(KERN_INFO "LED register sucessful!\n");
~' v! d# w- G: e. W1 G" t) w) P: j( ^5 |2 e' A* E& B
return ret;/ P w$ X. W* D$ p( v
}
* C; B2 W" g5 o M7 `" j* L8 C5 N
static void __exit led_platform_exit(void)7 y- G+ ` _' Z6 G. ]
{4 a- `6 g; V K* l
platform_device_unregister(&da850_evm_tl_leds_device);
% ^+ y( S- |$ d* }* x" t: F; J ?1 ?
8 T& G/ U0 ]" n printk(KERN_INFO "LED unregister!\n"); k7 w# w( `8 s' Q: @
}3 [5 z( T# d p8 F
' D; m1 V, G" B4 O% o5 G8 t- pmodule_init(led_platform_init);
5 d" ]. t% l$ ?, {) O, U4 v% J6 A- Tmodule_exit(led_platform_exit);0 `+ a( A) O8 ^
" K0 Q6 {9 w6 }$ p: l3 |
MODULE_DESCRIPTION("Led platform driver"); c8 F2 |; n% H3 z
MODULE_AUTHOR("Tronlong");8 ]2 z0 L- t' H" O
MODULE_LICENSE("GPL");
$ c& ^! O0 o5 Q2 }; \; ^& {2 t$ H0 `
& B7 Y, H/ T& @3 X' ~9 U2 o |
|