Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Functions
lm8323.c File Reference
#include <linux/module.h>
#include <linux/i2c.h>
#include <linux/interrupt.h>
#include <linux/sched.h>
#include <linux/mutex.h>
#include <linux/delay.h>
#include <linux/input.h>
#include <linux/leds.h>
#include <linux/pm.h>
#include <linux/i2c/lm8323.h>
#include <linux/slab.h>

Go to the source code of this file.

Data Structures

struct  lm8323_pwm
 
struct  lm8323_chip
 

Macros

#define LM8323_CMD_READ_ID   0x80 /* Read chip ID. */
 
#define LM8323_CMD_WRITE_CFG   0x81 /* Set configuration item. */
 
#define LM8323_CMD_READ_INT   0x82 /* Get interrupt status. */
 
#define LM8323_CMD_RESET   0x83 /* Reset, same as external one */
 
#define LM8323_CMD_WRITE_PORT_SEL   0x85 /* Set GPIO in/out. */
 
#define LM8323_CMD_WRITE_PORT_STATE   0x86 /* Set GPIO pullup. */
 
#define LM8323_CMD_READ_PORT_SEL   0x87 /* Get GPIO in/out. */
 
#define LM8323_CMD_READ_PORT_STATE   0x88 /* Get GPIO pullup. */
 
#define LM8323_CMD_READ_FIFO   0x89 /* Read byte from FIFO. */
 
#define LM8323_CMD_RPT_READ_FIFO   0x8a /* Read FIFO (no increment). */
 
#define LM8323_CMD_SET_ACTIVE   0x8b /* Set active time. */
 
#define LM8323_CMD_READ_ERR   0x8c /* Get error status. */
 
#define LM8323_CMD_READ_ROTATOR   0x8e /* Read rotator status. */
 
#define LM8323_CMD_SET_DEBOUNCE   0x8f /* Set debouncing time. */
 
#define LM8323_CMD_SET_KEY_SIZE   0x90 /* Set keypad size. */
 
#define LM8323_CMD_READ_KEY_SIZE   0x91 /* Get keypad size. */
 
#define LM8323_CMD_READ_CFG   0x92 /* Get configuration item. */
 
#define LM8323_CMD_WRITE_CLOCK   0x93 /* Set clock config. */
 
#define LM8323_CMD_READ_CLOCK   0x94 /* Get clock config. */
 
#define LM8323_CMD_PWM_WRITE   0x95 /* Write PWM script. */
 
#define LM8323_CMD_START_PWM   0x96 /* Start PWM engine. */
 
#define LM8323_CMD_STOP_PWM   0x97 /* Stop PWM engine. */
 
#define INT_KEYPAD   0x01 /* Key event. */
 
#define INT_ROTATOR   0x02 /* Rotator event. */
 
#define INT_ERROR   0x08 /* Error: use CMD_READ_ERR. */
 
#define INT_NOINIT   0x10 /* Lost configuration. */
 
#define INT_PWM1   0x20 /* PWM1 stopped. */
 
#define INT_PWM2   0x40 /* PWM2 stopped. */
 
#define INT_PWM3   0x80 /* PWM3 stopped. */
 
#define ERR_BADPAR   0x01 /* Bad parameter. */
 
#define ERR_CMDUNK   0x02 /* Unknown command. */
 
#define ERR_KEYOVR   0x04 /* Too many keys pressed. */
 
#define ERR_FIFOOVER   0x40 /* FIFO overflow. */
 
#define CFG_MUX1SEL   0x01 /* Select MUX1_OUT input. */
 
#define CFG_MUX1EN   0x02 /* Enable MUX1_OUT. */
 
#define CFG_MUX2SEL   0x04 /* Select MUX2_OUT input. */
 
#define CFG_MUX2EN   0x08 /* Enable MUX2_OUT. */
 
#define CFG_PSIZE   0x20 /* Package size (must be 0). */
 
#define CFG_ROTEN   0x40 /* Enable rotator. */
 
#define CLK_RCPWM_INTERNAL   0x00
 
#define CLK_RCPWM_EXTERNAL   0x03
 
#define CLK_SLOWCLKEN   0x08 /* Enable 32.768kHz clock. */
 
#define CLK_SLOWCLKOUT   0x40 /* Enable slow pulse output. */
 
#define LM8323_I2C_ADDR00   (0x84 >> 1) /* 1000 010x */
 
#define LM8323_I2C_ADDR01   (0x86 >> 1) /* 1000 011x */
 
#define LM8323_I2C_ADDR10   (0x88 >> 1) /* 1000 100x */
 
#define LM8323_I2C_ADDR11   (0x8A >> 1) /* 1000 101x */
 
#define LM8323_FIFO_LEN   15
 
#define PWM_SET(v)   (0x4000 | ((v) & 0xff))
 
#define PWM_GOTOSTART   0x0000
 
#define PWM_END(reset)   (0xc000 | (!!(reset) << 11))
 
#define PWM_RAMP(s, t, n, u)
 
#define PWM_LOOP(cnt, pos)
 
#define PWM_WAIT_TRIG(chans)   (0xe000 | (((chans) & 0x7) << 6))
 
#define PWM_SEND_TRIG(chans)   (0xe000 | ((chans) & 0x7))
 
#define client_to_lm8323(c)   container_of(c, struct lm8323_chip, client)
 
#define dev_to_lm8323(d)   container_of(d, struct lm8323_chip, client->dev)
 
#define cdev_to_pwm(c)   container_of(c, struct lm8323_pwm, cdev)
 
#define work_to_pwm(w)   container_of(w, struct lm8323_pwm, work)
 
#define LM8323_MAX_DATA   8
 

Functions

 MODULE_DEVICE_TABLE (i2c, lm8323_id)
 
 module_i2c_driver (lm8323_i2c_driver)
 
 MODULE_AUTHOR ("Timo O. Karjalainen <[email protected]>")
 
 MODULE_AUTHOR ("Daniel Stone")
 
 MODULE_AUTHOR ("Felipe Balbi <[email protected]>")
 
 MODULE_DESCRIPTION ("LM8323 keypad driver")
 
 MODULE_LICENSE ("GPL")
 

Macro Definition Documentation

#define cdev_to_pwm (   c)    container_of(c, struct lm8323_pwm, cdev)

Definition at line 164 of file lm8323.c.

#define CFG_MUX1EN   0x02 /* Enable MUX1_OUT. */

Definition at line 78 of file lm8323.c.

#define CFG_MUX1SEL   0x01 /* Select MUX1_OUT input. */

Definition at line 77 of file lm8323.c.

#define CFG_MUX2EN   0x08 /* Enable MUX2_OUT. */

Definition at line 80 of file lm8323.c.

#define CFG_MUX2SEL   0x04 /* Select MUX2_OUT input. */

Definition at line 79 of file lm8323.c.

#define CFG_PSIZE   0x20 /* Package size (must be 0). */

Definition at line 81 of file lm8323.c.

#define CFG_ROTEN   0x40 /* Enable rotator. */

Definition at line 82 of file lm8323.c.

#define client_to_lm8323 (   c)    container_of(c, struct lm8323_chip, client)

Definition at line 162 of file lm8323.c.

#define CLK_RCPWM_EXTERNAL   0x03

Definition at line 86 of file lm8323.c.

#define CLK_RCPWM_INTERNAL   0x00

Definition at line 85 of file lm8323.c.

#define CLK_SLOWCLKEN   0x08 /* Enable 32.768kHz clock. */

Definition at line 87 of file lm8323.c.

#define CLK_SLOWCLKOUT   0x40 /* Enable slow pulse output. */

Definition at line 88 of file lm8323.c.

#define dev_to_lm8323 (   d)    container_of(d, struct lm8323_chip, client->dev)

Definition at line 163 of file lm8323.c.

#define ERR_BADPAR   0x01 /* Bad parameter. */

Definition at line 71 of file lm8323.c.

#define ERR_CMDUNK   0x02 /* Unknown command. */

Definition at line 72 of file lm8323.c.

#define ERR_FIFOOVER   0x40 /* FIFO overflow. */

Definition at line 74 of file lm8323.c.

#define ERR_KEYOVR   0x04 /* Too many keys pressed. */

Definition at line 73 of file lm8323.c.

#define INT_ERROR   0x08 /* Error: use CMD_READ_ERR. */

Definition at line 64 of file lm8323.c.

#define INT_KEYPAD   0x01 /* Key event. */

Definition at line 62 of file lm8323.c.

#define INT_NOINIT   0x10 /* Lost configuration. */

Definition at line 65 of file lm8323.c.

#define INT_PWM1   0x20 /* PWM1 stopped. */

Definition at line 66 of file lm8323.c.

#define INT_PWM2   0x40 /* PWM2 stopped. */

Definition at line 67 of file lm8323.c.

#define INT_PWM3   0x80 /* PWM3 stopped. */

Definition at line 68 of file lm8323.c.

#define INT_ROTATOR   0x02 /* Rotator event. */

Definition at line 63 of file lm8323.c.

#define LM8323_CMD_PWM_WRITE   0x95 /* Write PWM script. */

Definition at line 57 of file lm8323.c.

#define LM8323_CMD_READ_CFG   0x92 /* Get configuration item. */

Definition at line 54 of file lm8323.c.

#define LM8323_CMD_READ_CLOCK   0x94 /* Get clock config. */

Definition at line 56 of file lm8323.c.

#define LM8323_CMD_READ_ERR   0x8c /* Get error status. */

Definition at line 49 of file lm8323.c.

#define LM8323_CMD_READ_FIFO   0x89 /* Read byte from FIFO. */

Definition at line 46 of file lm8323.c.

#define LM8323_CMD_READ_ID   0x80 /* Read chip ID. */

Definition at line 38 of file lm8323.c.

#define LM8323_CMD_READ_INT   0x82 /* Get interrupt status. */

Definition at line 40 of file lm8323.c.

#define LM8323_CMD_READ_KEY_SIZE   0x91 /* Get keypad size. */

Definition at line 53 of file lm8323.c.

#define LM8323_CMD_READ_PORT_SEL   0x87 /* Get GPIO in/out. */

Definition at line 44 of file lm8323.c.

#define LM8323_CMD_READ_PORT_STATE   0x88 /* Get GPIO pullup. */

Definition at line 45 of file lm8323.c.

#define LM8323_CMD_READ_ROTATOR   0x8e /* Read rotator status. */

Definition at line 50 of file lm8323.c.

#define LM8323_CMD_RESET   0x83 /* Reset, same as external one */

Definition at line 41 of file lm8323.c.

#define LM8323_CMD_RPT_READ_FIFO   0x8a /* Read FIFO (no increment). */

Definition at line 47 of file lm8323.c.

#define LM8323_CMD_SET_ACTIVE   0x8b /* Set active time. */

Definition at line 48 of file lm8323.c.

#define LM8323_CMD_SET_DEBOUNCE   0x8f /* Set debouncing time. */

Definition at line 51 of file lm8323.c.

#define LM8323_CMD_SET_KEY_SIZE   0x90 /* Set keypad size. */

Definition at line 52 of file lm8323.c.

#define LM8323_CMD_START_PWM   0x96 /* Start PWM engine. */

Definition at line 58 of file lm8323.c.

#define LM8323_CMD_STOP_PWM   0x97 /* Stop PWM engine. */

Definition at line 59 of file lm8323.c.

#define LM8323_CMD_WRITE_CFG   0x81 /* Set configuration item. */

Definition at line 39 of file lm8323.c.

#define LM8323_CMD_WRITE_CLOCK   0x93 /* Set clock config. */

Definition at line 55 of file lm8323.c.

#define LM8323_CMD_WRITE_PORT_SEL   0x85 /* Set GPIO in/out. */

Definition at line 42 of file lm8323.c.

#define LM8323_CMD_WRITE_PORT_STATE   0x86 /* Set GPIO pullup. */

Definition at line 43 of file lm8323.c.

#define LM8323_FIFO_LEN   15

Definition at line 97 of file lm8323.c.

#define LM8323_I2C_ADDR00   (0x84 >> 1) /* 1000 010x */

Definition at line 91 of file lm8323.c.

#define LM8323_I2C_ADDR01   (0x86 >> 1) /* 1000 011x */

Definition at line 92 of file lm8323.c.

#define LM8323_I2C_ADDR10   (0x88 >> 1) /* 1000 100x */

Definition at line 93 of file lm8323.c.

#define LM8323_I2C_ADDR11   (0x8A >> 1) /* 1000 101x */

Definition at line 94 of file lm8323.c.

#define LM8323_MAX_DATA   8

Definition at line 167 of file lm8323.c.

#define PWM_END (   reset)    (0xc000 | (!!(reset) << 11))

Definition at line 108 of file lm8323.c.

#define PWM_GOTOSTART   0x0000

Definition at line 103 of file lm8323.c.

#define PWM_LOOP (   cnt,
  pos 
)
Value:
(0xa000 | (((cnt) & 0x3f) << 7) | \
((pos) & 0x3f))

Definition at line 120 of file lm8323.c.

#define PWM_RAMP (   s,
  t,
  n,
  u 
)
Value:
((!!(s) << 14) | ((t) & 0x3f) << 8 | \
((n) & 0x7f) | ((u) ? 0 : 0x80))

Definition at line 114 of file lm8323.c.

#define PWM_SEND_TRIG (   chans)    (0xe000 | ((chans) & 0x7))

Definition at line 129 of file lm8323.c.

#define PWM_SET (   v)    (0x4000 | ((v) & 0xff))

Definition at line 101 of file lm8323.c.

#define PWM_WAIT_TRIG (   chans)    (0xe000 | (((chans) & 0x7) << 6))

Definition at line 127 of file lm8323.c.

#define work_to_pwm (   w)    container_of(w, struct lm8323_pwm, work)

Definition at line 165 of file lm8323.c.

Function Documentation

MODULE_AUTHOR ( "Timo O. Karjalainen <[email protected]>"  )
MODULE_AUTHOR ( "Daniel Stone"  )
MODULE_AUTHOR ( "Felipe Balbi <[email protected]>"  )
MODULE_DESCRIPTION ( "LM8323 keypad driver )
MODULE_DEVICE_TABLE ( i2c  ,
lm8323_id   
)
module_i2c_driver ( lm8323_i2c_driver  )
MODULE_LICENSE ( "GPL"  )