| /* |
| ** ============================================================================= |
| ** Copyright (c)2012 Immersion Corporation. |
| ** |
| ** This program is free software; you can redistribute it and/or |
| ** modify it under the terms of the GNU General Public License |
| ** as published by the Free Software Foundation; either version 2 |
| ** of the License, or (at your option) any later version. |
| ** |
| ** This program is distributed in the hope that it will be useful, |
| ** but WITHOUT ANY WARRANTY; without even the implied warranty of |
| ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| ** GNU General Public License for more details. |
| ** |
| ** You should have received a copy of the GNU General Public License |
| ** along with this program; if not, write to the Free Software |
| ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
| ** |
| ** File: |
| ** drv2605_vibra.h |
| ** |
| ** Description: |
| ** Header file for drv2605.c |
| ** |
| ** ============================================================================= |
| */ |
| |
| #ifndef _DRV2605_VIBRA_H_ |
| #define _DRV2605_VIBRA_H_ |
| |
| |
| |
| struct drv2605_platform_data { |
| int gpio_en; |
| int gpio_pwm; |
| const unsigned char *parameter_autocal_sequence; |
| unsigned int size_autocal_sequence; |
| bool repeat_autocal_sequence; |
| const unsigned char *parameter_sequence; |
| unsigned int size_sequence; |
| char effect_library; |
| unsigned char real_time_playback; |
| }; |
| |
| /* |
| Drv2605 |
| This file created by Immersion Corporation as an interim solution until |
| Texas Instruments provides an official header for the DRV2605 part. |
| Based on "DRV2605 Preliminary Datasheet 3-7-12 - Immersion.pdf" |
| */ |
| |
| /* |
| ** DRV2605 addresses |
| */ |
| |
| #define DEVICE_NAME "drv2605" |
| #define DRIVER_VERSION "182" |
| |
| /* Commands */ |
| #define HAPTIC_CMDID_PLAY_SINGLE_EFFECT ((char)0x01) |
| #define HAPTIC_CMDID_PLAY_EFFECT_SEQUENCE ((char)0x02) |
| #define HAPTIC_CMDID_PLAY_TIMED_EFFECT ((char)0x03) |
| #define HAPTIC_CMDID_GET_DEV_ID ((char)0x04) |
| #define HAPTIC_CMDID_RUN_DIAG ((char)0x05) |
| #define HAPTIC_CMDID_AUDIOHAPTIC_ENABLE ((char)0x06) |
| #define HAPTIC_CMDID_AUDIOHAPTIC_DISABLE ((char)0x07) |
| #define HAPTIC_CMDID_AUDIOHAPTIC_GETSTATUS ((char)0x08) |
| #define HAPTIC_CMDID_STOP ((char)0xFF) |
| |
| /* Command size */ |
| #define HAPTIC_CMDSZ_SINGLE_EFFECT 2 |
| #define HAPTIC_CMDSZ_EFFECT_SEQUENCE 9 |
| #define HAPTIC_CMDSZ_TIMED_EFFECT 3 |
| #define HAPTIC_CMDSZ_STOP 1 |
| |
| /* |
| ** Go |
| */ |
| #define GO_REG 0x0C |
| #define GO 0x01 |
| #define STOP 0x00 |
| |
| /* |
| ** Status |
| */ |
| #define STATUS_REG 0x00 |
| #define STATUS_DEFAULT 0x00 |
| |
| #define DIAG_RESULT_MASK (1 << 3) |
| #define AUTO_CAL_PASSED (0 << 3) |
| #define AUTO_CAL_FAILED (1 << 3) |
| #define DIAG_GOOD (0 << 3) |
| #define DIAG_BAD (1 << 3) |
| |
| #define DEV_ID_MASK (7 << 5) |
| #define DRV2605 (5 << 5) |
| #define DRV2604 (4 << 5) |
| |
| /* |
| ** Mode |
| */ |
| #define MODE_REG 0x01 |
| #define MODE_STANDBY 0x40 |
| |
| #define DRV260X_MODE_MASK 0x07 |
| #define MODE_INTERNAL_TRIGGER 0 |
| #define MODE_EXTERNAL_TRIGGER_EDGE 1 |
| #define MODE_EXTERNAL_TRIGGER_LEVEL 2 |
| #define MODE_PWM_OR_ANALOG_INPUT 3 |
| #define MODE_AUDIOHAPTIC 4 |
| #define MODE_REAL_TIME_PLAYBACK 5 |
| #define MODE_DIAGNOSTICS 6 |
| #define AUTO_CALIBRATION 7 |
| |
| #define MODE_STANDBY_MASK 0x40 |
| #define MODE_READY 1 /* default*/ |
| #define MODE_SOFT_STANDBY 0 |
| |
| #define MODE_RESET 0x80 |
| |
| /* |
| ** Real Time Playback |
| */ |
| #define REAL_TIME_PLAYBACK_REG 0x02 |
| |
| /* |
| ** Library Selection |
| */ |
| #define LIBRARY_SELECTION_REG 0x03 |
| #define LIBRARY_SELECTION_DEFAULT 0x00 |
| |
| #define LIBRARY_A 0x01 |
| #define LIBRARY_B 0x02 |
| #define LIBRARY_C 0x03 |
| #define LIBRARY_D 0x04 |
| #define LIBRARY_E 0x05 |
| #define LIBRARY_F 0x06 |
| |
| #define LIBRARY_SELECTION_MASK 0x07 |
| #define LIBRARY_SELECTION_LIBRARY_RAM 0 /* default*/ |
| #define LIBRARY_SELECTION_LIBRARY_OVERDRIVE 1 |
| #define LIBRARY_SELECTION_LIBRARY_40_60 2 |
| #define LIBRARY_SELECTION_LIBRARY_60_80 3 |
| #define LIBRARY_SELECTION_LIBRARY_100_140 4 |
| #define LIBRARY_SELECTION_LIBRARY_140_PLUS 5 |
| |
| #define LIBRARY_SELECTION_HIZ_MASK 0x10 |
| #define LIBRARY_SELECTION_HIZ_EN 1 |
| #define LIBRARY_SELECTION_HIZ_DIS 0 |
| |
| /* |
| ** Waveform Sequencer |
| */ |
| #define WAVEFORM_SEQUENCER_REG 0x04 |
| #define WAVEFORM_SEQUENCER_REG2 0x05 |
| #define WAVEFORM_SEQUENCER_REG3 0x06 |
| #define WAVEFORM_SEQUENCER_REG4 0x07 |
| #define WAVEFORM_SEQUENCER_REG5 0x08 |
| #define WAVEFORM_SEQUENCER_REG6 0x09 |
| #define WAVEFORM_SEQUENCER_REG7 0x0A |
| #define WAVEFORM_SEQUENCER_REG8 0x0B |
| #define WAVEFORM_SEQUENCER_MAX 8 |
| #define WAVEFORM_SEQUENCER_DEFAULT 0x00 |
| |
| /* |
| ** OverDrive Time Offset |
| */ |
| #define OVERDRIVE_TIME_OFFSET_REG 0x0D |
| |
| /* |
| ** Sustain Time Offset, postive |
| */ |
| #define SUSTAIN_TIME_OFFSET_POS_REG 0x0E |
| |
| /* |
| ** Sustain Time Offset, negative |
| */ |
| #define SUSTAIN_TIME_OFFSET_NEG_REG 0x0F |
| |
| /* |
| ** Brake Time Offset |
| */ |
| #define BRAKE_TIME_OFFSET_REG 0x10 |
| |
| /* |
| ** Audio to Haptics Control |
| */ |
| #define AUDIO_HAPTICS_CONTROL_REG 0x11 |
| |
| #define AUDIO_HAPTICS_RECT_10MS (0 << 2) |
| #define AUDIO_HAPTICS_RECT_20MS (1 << 2) |
| #define AUDIO_HAPTICS_RECT_30MS (2 << 2) |
| #define AUDIO_HAPTICS_RECT_40MS (3 << 2) |
| |
| #define AUDIO_HAPTICS_FILTER_100HZ 0 |
| #define AUDIO_HAPTICS_FILTER_125HZ 1 |
| #define AUDIO_HAPTICS_FILTER_150HZ 2 |
| #define AUDIO_HAPTICS_FILTER_200HZ 3 |
| |
| /* |
| ** Audio to Haptics Minimum Input Level |
| */ |
| #define AUDIO_HAPTICS_MIN_INPUT_REG 0x12 |
| |
| /* |
| ** Audio to Haptics Maximum Input Level |
| */ |
| #define AUDIO_HAPTICS_MAX_INPUT_REG 0x13 |
| |
| /* |
| ** Audio to Haptics Minimum Output Drive |
| */ |
| #define AUDIO_HAPTICS_MIN_OUTPUT_REG 0x14 |
| |
| /* |
| ** Audio to Haptics Maximum Output Drive |
| */ |
| #define AUDIO_HAPTICS_MAX_OUTPUT_REG 0x15 |
| |
| /* |
| ** Rated Voltage |
| */ |
| #define RATED_VOLTAGE_REG 0x16 |
| |
| /* |
| ** Overdrive Clamp Voltage |
| */ |
| #define OVERDRIVE_CLAMP_VOLTAGE_REG 0x17 |
| |
| /* |
| ** Auto Calibrationi Compensation Result |
| */ |
| #define AUTO_CALI_RESULT_REG 0x18 |
| |
| /* |
| ** Auto Calibration Back-EMF Result |
| */ |
| #define AUTO_CALI_BACK_EMF_RESULT_REG 0x19 |
| |
| /* |
| ** Feedback Control |
| */ |
| #define FEEDBACK_CONTROL_REG 0x1A |
| |
| #define FEEDBACK_CONTROL_BEMF_ERM_GAIN0 0 /* 0.33x */ |
| #define FEEDBACK_CONTROL_BEMF_ERM_GAIN1 1 /* 1.0x */ |
| #define FEEDBACK_CONTROL_BEMF_ERM_GAIN2 2 /* 1.8x */ |
| #define FEEDBACK_CONTROL_BEMF_ERM_GAIN3 3 /* 4.0x */ |
| |
| #define FEEDBACK_CONTROL_BEMF_LRA_GAIN0 0 /* 5x */ |
| #define FEEDBACK_CONTROL_BEMF_LRA_GAIN1 1 /* 10x */ |
| #define FEEDBACK_CONTROL_BEMF_LRA_GAIN2 2 /* 20x */ |
| #define FEEDBACK_CONTROL_BEMF_LRA_GAIN3 3 /* 30x */ |
| |
| #define LOOP_RESPONSE_SLOW (0 << 2) |
| #define LOOP_RESPONSE_MEDIUM (1 << 2) /* default */ |
| #define LOOP_RESPONSE_FAST (2 << 2) |
| #define LOOP_RESPONSE_VERY_FAST (3 << 2) |
| |
| #define FB_BRAKE_FACTOR_1X (0 << 4) /* 1x */ |
| #define FB_BRAKE_FACTOR_2X (1 << 4) /* 2x */ |
| #define FB_BRAKE_FACTOR_3X (2 << 4) /* 3x (default) */ |
| #define FB_BRAKE_FACTOR_4X (3 << 4) /* 4x */ |
| #define FB_BRAKE_FACTOR_6X (4 << 4) /* 6x */ |
| #define FB_BRAKE_FACTOR_8X (5 << 4) /* 8x */ |
| #define FB_BRAKE_FACTOR_16X (6 << 4) /* 16x */ |
| #define FB_BRAKE_DISABLED (7 << 4) |
| |
| #define FEEDBACK_CONTROL_MODE_ERM 0 /* default */ |
| #define FEEDBACK_CONTROL_MODE_LRA (1 << 7) |
| |
| /* |
| ** Control1 |
| */ |
| #define Control1_REG 0x1B |
| |
| #define STARTUP_BOOST_ENABLED (1 << 7) |
| #define STARTUP_BOOST_DISABLED (0 << 7) /* default */ |
| #define AC_COUPLE_ENABLED (1 << 5) |
| #define AC_COUPLE_DISABLED (0 << 5) /* default */ |
| |
| #define DEFAULT_DRIVE_TIME 0x17 |
| #define AUDIOHAPTIC_DRIVE_TIME 0x13 |
| |
| /* |
| ** Control2 |
| */ |
| #define Control2_REG 0x1C |
| |
| #define IDISS_TIME_MASK 0x03 |
| #define IDISS_TIME_VERY_SHORT 0 |
| #define IDISS_TIME_SHORT 1 |
| #define IDISS_TIME_MEDIUM 2 /* default */ |
| #define IDISS_TIME_LONG 3 |
| |
| #define BLANKING_TIME_MASK 0x0C |
| #define BLANKING_TIME_VERY_SHORT (0 << 2) |
| #define BLANKING_TIME_SHORT (1 << 2) |
| #define BLANKING_TIME_MEDIUM (2 << 2) /* default */ |
| #define BLANKING_TIME_VERY_LONG (3 << 2) |
| |
| #define AUTO_RES_GAIN_MASK 0x30 |
| #define AUTO_RES_GAIN_VERY_LOW (0 << 4) |
| #define AUTO_RES_GAIN_LOW (1 << 4) |
| #define AUTO_RES_GAIN_MEDIUM (2 << 4) /* default */ |
| #define AUTO_RES_GAIN_HIGH (3 << 4) |
| |
| #define SOFT_BRAKE_MASK 0x40 |
| |
| #define BIDIR_INPUT_MASK 0x80 |
| #define UNIDIRECT_INPUT (0 << 7) |
| #define BIDIRECT_INPUT (1 << 7) /* default */ |
| |
| /* |
| ** Control3 |
| */ |
| #define Control3_REG 0x1D |
| |
| #define INPUT_PWM (0 << 1) /* default */ |
| #define INPUT_ANALOG (1 << 1) |
| #define ERM_OpenLoop_Enabled (1 << 5) |
| #define NG_Thresh_DISABLED (0 << 6) |
| #define NG_Thresh_1 (1 << 6) |
| #define NG_Thresh_2 (2 << 6) |
| #define NG_Thresh_3 (3 << 6) |
| |
| /* |
| ** Auto Calibration Memory Interface |
| */ |
| #define AUTOCAL_MEM_INTERFACE_REG 0x1E |
| #define OTP_STATUS_MASK 0x04 |
| #define OTP_PROGRAM 0x01 |
| |
| #define AUTOCAL_TIME_150MS (0 << 4) |
| #define AUTOCAL_TIME_250MS (1 << 4) |
| #define AUTOCAL_TIME_500MS (2 << 4) |
| #define AUTOCAL_TIME_1000MS (3 << 4) |
| |
| #define SILICON_REVISION_REG 0x3B |
| #define SILICON_REVISION_MASK 0x07 |
| |
| #define AUDIO_HAPTICS_MIN_INPUT_VOLTAGE 0x19 |
| #define AUDIO_HAPTICS_MAX_INPUT_VOLTAGE 0x64 |
| #define AUDIO_HAPTICS_MIN_OUTPUT_VOLTAGE 0x19 |
| #define AUDIO_HAPTICS_MAX_OUTPUT_VOLTAGE 0xFF |
| |
| #define DEFAULT_ERM_AUTOCAL_COMPENSATION 0x14 |
| #define DEFAULT_ERM_AUTOCAL_BACKEMF 0x72 |
| |
| #define DEFAULT_LRA_AUTOCAL_COMPENSATION 0x06 |
| #define DEFAULT_LRA_AUTOCAL_BACKEMF 0xDE |
| |
| #endif /* _DRV2605_VIBRA_H_ */ |