aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/keyboard/cypress/issp_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/input/keyboard/cypress/issp_main.c')
-rw-r--r--drivers/input/keyboard/cypress/issp_main.c937
1 files changed, 0 insertions, 937 deletions
diff --git a/drivers/input/keyboard/cypress/issp_main.c b/drivers/input/keyboard/cypress/issp_main.c
deleted file mode 100644
index ef273770fd8..00000000000
--- a/drivers/input/keyboard/cypress/issp_main.c
+++ /dev/null
@@ -1,937 +0,0 @@
-#include "issp_revision.h"
-#ifdef PROJECT_REV_304
-/* Copyright 2006-2007, Cypress Semiconductor Corporation.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
-OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONRTACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Disclaimer: CYPRESS MAKES NO WARRANTY OF ANY KIND,EXPRESS OR IMPLIED,
-WITH REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-Cypress reserves the right to make changes without further notice to the
-materials described herein. Cypress does not assume any liability arising
-out of the application or use of any product or circuit described herein.
-Cypress does not authorize its products for use as critical components in
-life-support systems where a malfunction or failure may reasonably be
-expected to result in significant injury to the user. The inclusion of
-Cypressï¿?product in a life-support systems application implies that the
-manufacturer assumes all risk of such use and in doing so indemnifies
-Cypress against all charges.
-
-Use may be limited by and subject to the applicable Cypress software
-license agreement.
-
----------------------------------------------------------------------------*/
-
-/* ############################################################################
-################### CRITICAL PROJECT CONSTRAINTS ########################
-############################################################################
-
-ISSP programming can only occur within a temperature range of 5C to 50C.
-- This project is written without temperature compensation and using
-programming pulse-widths that match those used by programmers such as the
-Mini-Prog and the ISSP Programmer.
-This means that the die temperature of the PSoC device cannot be outside
-of the above temperature range.
-If a wider temperature range is required, contact your Cypress Semi-
-conductor FAE or sales person for assistance.
-
-The project can be configured to program devices at 5V or at 3.3V.
-- Initialization of the device is different for different voltages. The
-initialization is hardcoded and can only be set for one voltage range.
-The supported voltages ranges are 3.3V (3.0V to 3.6V) and 5V (4.75V to
-5.25V). See the device datasheet for more details. If varying voltage
-ranges must be supported, contact your Cypress Semiconductor FAE or sales
-person for assistance.
-- ISSP programming for the 2.7V range (2.7V to 3.0V) is not supported.
-
-This program does not support programming all PSoC Devices
-- It does not support obsoleted PSoC devices. A list of devices that are
-not supported is shown here:
-CY8C22x13 - not supported
-CY8C24x23 - not supported (CY8C24x23A is supported)
-CY8C25x43 - not supported
-CY8C26x43 - not supported
-- It does not suport devices that have not been released for sale at the
-time this version was created. If you need to ISSP program a newly released
-device, please contact Cypress Semiconductor Applications, your FAE or
-sales person for assistance.
-The CY8C20x23 devices are not supported at the time of this release.
-
-############################################################################
-##########################################################################*/
-
-/* This program uses information found in Cypress Semiconductor application
-notes "Programming - In-System Serial Programming Protocol", AN2026. The
-version of this application note that applies to the specific PSoC that is
-being In-System Serial Programmed should be read and and understood when
-using this program. (http:www.cypress.com)
-
-This project is included with releases of PSoC Programmer software. It is
-important to confirm that the latest revision of this software is used when
-it is used. The revision of this copy can be found in the Project History
-table below.
-*/
-
-/*
-PROJECT HISTORY
-date revision author description
--------- -------- ------ -----------------------------------------------
-7/23/08 3.04 ptj 1. CPU clock speed set to to 12MHz (default) after
- TSYNC is disabled. Previously, it was being set
- to 3MHz on accident. This affects the following
- mnemonics:
- ID_SETUP_1,
- VERIFY_SETUP,
- ERASE,
- SECURE,
- CHECKSUM_SETUP,
- PROGRAM_AND_VERIFY,
- ID_SETUP_2,
- SYNC_DISABLE
-
-6/06/08 3.03 ptj 1. The Verify_Setup section can tell when flash
- is fully protected. bTargetStatus[0] shows a
- 01h when flash is "W" Full Protection
-7/23/08 2. READ-ID-WORD updated to read Revision ID from
- Accumulator A and X, registers T,F0h and T,F3h
-
-5/30/08 3.02 ptj 1. All vectors work.
- 2. Main function will execute the
- following programming sequence:
- . id setup 1
- . id setup 2
- . erase
- . program and verify
- . verify (although not necessary)
- . secure flash
- . read security
- . checksum
-
-05/28/08 3.01 ptj TEST CODE - NOT COMPLETE
- 1. The sequence surrounding PROGRAM-AND-VERIFY was
- improved and works according to spec.
- 2. The sequence surroudning VERIFY-SETUP was devel-
- oped and improved.
- 3. TSYNC Enable is used to in a limited way
- 4. Working Vectors: ID-SETUP-1, ID-SETUP-2, ERASE,
- PROGRAM-AND-VERIFY, SECURE, VERIFY-SETUP,
- CHECKSUM-SETUP
- 5. Un-tested Vectors: READ-SECURITY
-
-05/23/08 3.00 ptj TEST CODE - NOT COMPLETE
- 1. This code is a test platform for the development
- of the Krypton (cy8c20x66) Programming Sequence.
- See 001-15870 rev *A. This code works on "rev B"
- silicon.
- 2. Host is Hydra 29000, Target is Krypton "rev B"
- 3. Added Krypton device support
- 4. TYSNC Enable/Disable is not used.
- 5. Working Vectors: ID-SETUP-1, ID-SETUP-2, ERASE,
- PROGRAM-AND-VERIFY, SECURE
- 6. Non-working Vectors: CHECKSUM-SETUP
- 7. Un-tested Vectors: READ-SECURITY, VERIFY-SETUP
- 8. Other minor (non-SROM) vectors not listed.
-
-09/23/07 2.11 dkn 1. Added searchable comments for the HSSP app note.
- 2. Added new device vectors.
- 3. Verified write and erase pulsewidths.
- 4. Modified some functions for easier porting to
- other processors.
-
-09/23/06 2.10 mwl 1. Added #define SECURITY_BYTES_PER_BANK to
- file issp_defs.h. Modified function
- fSecureTargetFlashMain() in issp_routines.c
- to use new #define. Modified function
- fLoadSecurityData() in issp_driver_routines.c
- to accept a bank number. Modified the secure
- data loop in main.c to program multiple banks.
-
- 2. Created function fAccTargetBankChecksum to
- read and add the target bank checksum to the
- referenced accumulator. This allows the
- checksum loop in main.c to function at the
- same level of abstraction as the other
- programming steps. Accordingly, modified the
- checksum loop in main.c. Deleted previous
- function fVerifyTargetChecksum().
-
-09/08/06 2.00 mwl 1. Array variable abTargetDataOUT was not
- getting intialized anywhere and compiled as a
- one-byte array. Modified issp_driver_routines.c
- line 44 to initialize with TARGET_DATABUFF_LEN.
-
- 2. Function void LoadProgramData(unsigned char
- bBlockNum) in issp_driver_routines.c had only
- one parameter bBlockNum but was being called
- from function main() with two parameters,
- LoadProgramData(bBankCounter, (unsigned char)
- iBlockCounter). Modified function
- LoadProgramData() to accept both parameters,
- and in turn modified InitTargetTestData() to
- accept and use both as well.
-
- 3. Corrected byte set_bank_number[1]
- inissp_vectors.h. Was 0xF2, correct value is
- 0xE2.
-
- 4. Corrected the logic to send the SET_BANK_NUM
- vectors per the AN2026B flow chart.The previous
- code version was sending once per block, but
- should have been once per bank. Removed the
- conditionally-compiled bank setting code blocks
- from the top of fProgramTargetBlock() and
- fVerifyTargetBlock() int issp_routines.c and
- created a conditionally-compiled subroutine in
- that same file called SetBankNumber(). Two
- conditionally-compiled calls to SetBankNumber()
- were added to main.c().
-
- 5. Corrected CY8C29x66 NUM_BANKS and
- BLOCKS_PER_BANK definitions in ISSP_Defs.h.
- Was 2 and 256 respectively, correct values are
- 4 and 128.
-
- 6. Modified function fVerifyTargetChecksum()
- in issp_routines.c to read and accumulate multiple
- banks of checksums as required for targets
- CY8C24x94 and CY8C29x66. Would have kept same
- level of abstraction as other multi-bank functions
- in main.c, but this implementation impacted the
- code the least.
-
- 7. Corrected byte checksum_v[26] of
- CHECKSUM_SETUP_24_29 in issp_vectors.h. Was 0x02,
- correct value is 0x04.
-
-06/30/06 1.10 jvy Added support for 24x94 and 29x66 devices.
-06/09/06 1.00 jvy Changed CPU Clk to 12MHz (from 24MHz) so the
- host can run from 3.3V.
- Simplified init of security data.
-06/05/06 0.06 jvy Version #ifdef added to each file to make sure
- all of the file are from the same revision.
- Added flags to prevent multiple includes of H
- files.
- Changed pre-determined data for demo to be
- unique for each block.
- Changed block verify to check all blocks after
- block programming has been completed.
- Added SetSCLKHiZ to explicitly set the Clk to
- HighZ before power cycle acquire.
- Fixed wrong vectors in setting Security.
- Fixed wrong vectors in Block program.
- Added support for pods
-06/05/06 0.05 jvy Comments from code review. First copy checked
- into perforce. Code has been updated enough to
- compile, by implementing some comments and
- fixing others.
-06/04/06 0.04 jvy made code more efficient in bReceiveByte(), and
- SendVector() by re-arranging so that local vars
- could be eliminated.
- added defines for the delays used in the code.
-06/02/06 0.03 jvy added number of Flash block adjustment to
- programming. added power cycle programming
- mode support. This is the version initially
- sent out for peer review.
-06/02/06 0.02 jvy added framework for multiple chip support from
- one source code set using compiler directives.
- added timeout to high-low trasition detection.
- added multiple error message to allow tracking
- of failures.
-05/30/06 0.01 jvy initial version,
- created from DBD's issp_27xxx_v3 program.
-*/
-
-/*
- PSoC In-System Serial Programming (ISSP) Template
- This PSoC Project is designed to be used as a template for designs that
- require PSoC ISSP Functions.
-
- This project is based on the AN2026 series of Application Notes. That app
- note should be referenced before any modifications to this project are made.
-
- The subroutines and files were created in such a way as to allow easy cut &
- paste as needed. There are no customer-specific functions in this project.
- This demo of the code utilizes a PSoC as the Host.
-
- Some of the subroutines could be merged, or otherwise reduced, but they have
- been written as independently as possible so that the specific steps involved
- within each function can easily be seen. By merging things, some code-space
- savings could be realized.
-
- As is, and with all features enabled, the project consumes approximately 3500
- bytes of code space, and 19-Bytes of RAM (not including stack usage). The
- Block-Verify requires a 64-Byte buffer for read-back verification. This same
- buffer could be used to hold the (actual) incoming program data.
-
- Please refer to the compiler-directives file "directives.h" to see the various
- features.
-
- The pin used in this project are assigned as shown below. The HOST pins are
- arbitrary and any 3 pins could be used (the masks used to control the pins
- must be changed). The TARGET pins cannot be changed, these are fixed function
- pins on the PSoC.
- The PWR pin is used to provide power to the target device if power cycle
- programming mode is used.
- The compiler directive RESET_MODE in ISSP_directives.h
- is used to select the programming mode. This pin could control the enable on
- a voltage regulator, or could control the gate of a FET that is used to turn
- the power to the PSoC on.
- The TP pin is a Test Point pin that can be used signal from the host processor
- that the program has completed certain tasks. Predefined test points are
- included that can be used to observe the timing for bulk erasing, block
- programming and security programming.
-
- SIGNAL HOST TARGET
- ---------------------
- SDATA P1.7 P1.0
- SCLK P1.6 P1.1
- XRES P2.0 XRES
- PWR P2.3 Vdd
- TP P0.7 n/a
-
- For test & demonstration, this project generates the program data internally.
- It does not take-in the data from an external source such as I2C, UART, SPI,
- etc. However, the program was written in such a way to be portable into such
- designs. The spirit of this project was to keep it stripped to the minimum
- functions required to do the ISSP functions only, thereby making a portable
- framework for integration with other projects.
-
- The high-level functions have been written in C in order to be portable to
- other processors. The low-level functions that are processor dependent, such
- as toggling pins and implementing specific delays, are all found in the file
- ISSP_Drive_Routines.c. These functions must be converted to equivalent
- functions for the HOST processor. Care must be taken to meet the timing
- requirements when converting to a new processor. ISSP timing information can
- be found in Application Note AN2026. All of the sections of this program
- that need to be modified for the host processor have "PROCESSOR_SPECIFIC" in
- the comments. By performing a "Find in files" using "PROCESSOR_SPECIFIC" these
- sections can easily be identified.
-
- The variables in this project use Hungarian notation. Hungarian prepends a
- lower case letter to each variable that identifies the variable type. The
- prefixes used in this program are defined below:
- b = byte length variable, signed char and unsigned char
- i = 2-byte length variable, signed int and unsigned int
- f = byte length variable used as a flag (TRUE = 0, FALSE != 0)
- ab = an array of byte length variables
-
- After this program has been ported to the desired host processor the timing
- of the signals must be confirmed. The maximum SCLK frequency must be checked
- as well as the timing of the bulk erase, block write and security write
- pulses.
-
- The maximum SCLK frequency for the target device can be found in the device
- datasheet under AC Programming Specifications with a Symbol of "Fsclk".
- An oscilloscope should be used to make sure that no half-cycles (the high
- time or the low time) are shorter than the half-period of the maximum
- freqency. In other words, if the maximum SCLK frequency is 8MHz, there can be
- no high or low pulses shorter than 1/(2*8MHz), or 62.5 nsec.
-
- The test point (TP) functions, enabled by the define USE_TP, provide an output
- from the host processor that brackets the timing of the internal bulk erase,
- block write and security write programming pulses. An oscilloscope, along with
- break points in the PSoC ICE Debugger should be used to verify the timing of
- the programming. The Application Note, "Host-Sourced Serial Programming"
- explains how to do these measurements and should be consulted for the expected
- timing of the erase and program pulses.*/
-
-/*C main line*/
-#include <linux/module.h>
-
-#include <linux/init.h>
-#include <linux/fs.h>
-#include <linux/interrupt.h>
-#include <linux/irq.h>
-#include <linux/sched.h>
-#include <linux/pm.h>
-#include <linux/sysctl.h>
-#include <linux/proc_fs.h>
-#include <linux/delay.h>
-#include <linux/input.h>
-#include <linux/gpio.h>
-#include <linux/uaccess.h>
-#include <linux/io.h>
-/*
-#include <m8c.h> part specific constants and macros
-#include "PSoCAPI.h" PSoC API definitions for all User Modules
- ------ Declarations Associated with ISSP Files & Routines -------
- Add these to your project as needed.
-*/
-#include "issp_extern.h"
-#include "issp_directives.h"
-#include "issp_defs.h"
-#include "issp_errors.h"
-#include <linux/i2c/touchkey_i2c.h>
-
-struct touchkey_i2c *issp_tkey_i2c;
-
-unsigned char bBankCounter;
-unsigned int iBlockCounter;
-unsigned int iChecksumData;
-unsigned int iChecksumTarget;
-
-#define EXT_I2C_SCL_HIGH\
- do {\
- int delay_count;\
- gpio_direction_output(issp_tkey_i2c->pdata->gpio_scl, 1);\
- gpio_direction_input(issp_tkey_i2c->pdata->gpio_scl);\
- delay_count = 100000;\
- while (delay_count--) {\
- if (gpio_get_value(issp_tkey_i2c->pdata->gpio_scl))\
- break;\
- udelay(1);\
- } \
- } while (0);
-#define EXT_I2C_SCL_LOW gpio_direction_output(\
- issp_tkey_i2c->pdata->gpio_scl, 0);
-#define EXT_I2C_SDA_HIGH gpio_direction_output(\
- issp_tkey_i2c->pdata->gpio_sda, 1);
-#define EXT_I2C_SDA_LOW gpio_direction_output(\
- issp_tkey_i2c->pdata->gpio_sda, 0);
-#define TRUE 1
-#define FALSE 0
-
-static void EXT_I2C_LOW(u32 delay)
-{
- EXT_I2C_SDA_LOW;
- /*udelay(delay); */
- EXT_I2C_SCL_HIGH;
- /*udelay(delay); */
- EXT_I2C_SCL_LOW;
- /*udelay(delay); */
-}
-
-static void EXT_I2C_HIGH(u32 delay)
-{
- EXT_I2C_SDA_HIGH;
- /*udelay(delay); */
- EXT_I2C_SCL_HIGH;
- /*udelay(delay); */
- EXT_I2C_SCL_LOW;
- /*udelay(delay); */
-}
-
-static void EXT_I2C_START(u32 delay)
-{
- EXT_I2C_SDA_HIGH;
- EXT_I2C_SCL_HIGH;
- /*udelay(delay); */
- EXT_I2C_SDA_LOW;
- /*udelay(delay); */
- EXT_I2C_SCL_LOW;
- /*udelay(delay); */
-
-}
-
-static void EXT_I2C_END(u32 delay)
-{
- EXT_I2C_SDA_LOW;
- EXT_I2C_SCL_HIGH;
- /*udelay(delay); */
- EXT_I2C_SDA_HIGH;
-}
-
-static int EXT_I2C_ACK(u32 delay)
-{
- u32 ack;
-
- /* SDA -> Input */
- gpio_direction_input(issp_tkey_i2c->pdata->gpio_sda);
-
- udelay(delay);
- EXT_I2C_SCL_HIGH;
- /*udelay(delay); */
- ack = gpio_get_value(issp_tkey_i2c->pdata->gpio_sda);
- EXT_I2C_SCL_LOW;
- /*udelay(delay); */
- if (ack)
- printk(KERN_DEBUG"EXT_I2C No ACK\n");
-
- return ack;
-}
-
-static void EXT_I2C_NACK(u32 delay)
-{
- EXT_I2C_SDA_HIGH;
- EXT_I2C_SCL_HIGH;
- /*udelay(delay); */
- EXT_I2C_SCL_LOW;
- /*udelay(delay); */
-}
-
-static void EXT_I2C_SEND_ACK(u32 delay)
-{
- gpio_direction_output(issp_tkey_i2c->pdata->gpio_sda, 0);
- EXT_I2C_SCL_HIGH;
- /*udelay(delay); */
- EXT_I2C_SCL_LOW;
- /*udelay(delay); */
-
-}
-
-#define EXT_I2C_DELAY 1
-/*============================================================
-
-Porting section 6. I2C function calling
-
-Connect baseband i2c function
-
-Warning 1. !!!! Burst mode is not supported. Transfer 1 byte Only.
-
-Every i2c packet has to
-" START > Slave address > One byte > STOP " at download mode.
-
-Warning 2. !!!! Check return value of i2c function.
-
-_i2c_read_(), _i2c_write_() must return
-TRUE (1) if success,
-FALSE(0) if failed.
-
-If baseband i2c function returns different value, convert return value.
-ex> baseband_return = baseband_i2c_read( slave_addr, pData, cLength );
-return ( baseband_return == BASEBAND_RETURN_VALUE_SUCCESS );
-
-Warning 3. !!!! Check Slave address
-
-Slave address is '0x7F' at download mode.
-( Diffrent with Normal touch working mode )
-'0x7F' is original address,
-If shift << 1 bit, It becomes '0xFE'
-
-============================================================*/
-
-static int _i2c_read_(unsigned char SlaveAddr,
- unsigned char *pData, unsigned char cLength)
-{
- unsigned int i;
- int delay_count = 10000;
-
- EXT_I2C_START(EXT_I2C_DELAY);
-
- SlaveAddr = SlaveAddr << 1;
- for (i = 8; i > 1; i--) {
- if ((SlaveAddr >> (i - 1)) & 0x1)
- EXT_I2C_HIGH(EXT_I2C_DELAY);
- else
- EXT_I2C_LOW(EXT_I2C_DELAY);
- }
-
- EXT_I2C_HIGH(EXT_I2C_DELAY);
-
- if (EXT_I2C_ACK(EXT_I2C_DELAY)) {
- EXT_I2C_END(EXT_I2C_DELAY);
- return FALSE;
- }
-
- udelay(10);
- gpio_direction_input(issp_tkey_i2c->pdata->gpio_scl);
- delay_count = 100000;
- while (delay_count--) {
- if (gpio_get_value(issp_tkey_i2c->pdata->gpio_scl))
- break;
- udelay(1);
- }
- while (cLength--) {
- *pData = 0;
- for (i = 8; i > 0; i--) {
- /*udelay(EXT_I2C_DELAY); */
- EXT_I2C_SCL_HIGH;
- /*udelay(EXT_I2C_DELAY); */
- *pData |=
- (!!(gpio_get_value(issp_tkey_i2c->pdata->gpio_sda))
- << (i - 1));
- /*udelay(EXT_I2C_DELAY); */
- EXT_I2C_SCL_LOW;
- /*udelay(EXT_I2C_DELAY); */
- }
-
- if (cLength) {
- EXT_I2C_SEND_ACK(EXT_I2C_DELAY);
- udelay(10);
- pData++;
- gpio_direction_input(issp_tkey_i2c->pdata->gpio_sda);
- gpio_direction_input(issp_tkey_i2c->pdata->gpio_scl);
- delay_count = 100000;
- while (delay_count--) {
- if (gpio_get_value
- (issp_tkey_i2c->pdata->gpio_scl))
- break;
- udelay(1);
- }
- } else
- EXT_I2C_NACK(EXT_I2C_DELAY);
- }
-
- EXT_I2C_END(EXT_I2C_DELAY);
-
- return TRUE;
-
-}
-
-#define TOUCHKEY_ADDRESS 0x20
-
-int get_touchkey_firmware(char *version)
-{
- int retry = 3;
- while (retry--) {
- if (_i2c_read_(TOUCHKEY_ADDRESS, version, 3))
- return 0;
-
- }
- return -1;
- /*printk(KERN_DEBUG
- "%s F/W version: 0x%x, Module version:0x%x\n",
- __FUNCTION__, version[1],version[2]); */
-}
-
-/* ErrorTrap()
- Return is not valid from main for PSOC, so this ErrorTrap routine is used.
- For some systems returning an error code will work best. For those, the
- calls to ErrorTrap() should be replaced with a return(bErrorNumber). For
- other systems another method of reporting an error could be added to this
- function -- such as reporting over a communcations port.*/
-void ErrorTrap(unsigned char bErrorNumber)
-{
-#ifndef RESET_MODE
- /* Set all pins to highZ to avoid back
- powering the PSoC through the GPIO
- protection diodes. */
- SetSCLKHiZ();
- SetSDATAHiZ();
- /* If Power Cycle programming, turn off the target */
- RemoveTargetVDD();
-#endif
- printk(KERN_DEBUG"\r\nErrorTrap: errorNumber: %d\n",
- bErrorNumber);
-
- return;
-}
-
-/* ========================================================================= */
-/* MAIN LOOP */
-/* Based on the diagram in the AN2026 */
-/* ========================================================================= */
-
-int ISSP_main(struct touchkey_i2c *tkey_i2c)
-{
- unsigned long flags;
-
- issp_tkey_i2c = tkey_i2c;
-
-/* This example section of commands show the highlevel calls to
-perform Target Initialization, SilcionID Test, BulkErase, Target
-RAM Load, FLASHBlock Program, and Target Checksum Verification.*/
-
- /* >>>> ISSP Programming Starts Here <<<<
- Acquire the device through reset or power cycle */
- s3c_gpio_setpull(issp_tkey_i2c->pdata->gpio_scl, S3C_GPIO_PULL_NONE);
- s3c_gpio_setpull(issp_tkey_i2c->pdata->gpio_sda, S3C_GPIO_PULL_NONE);
- issp_tkey_i2c->pdata->suspend();
- /*msleep(1);*/
- usleep_range(1000, 1000);
-#ifdef RESET_MODE
- gpio_tlmm_config(LED_26V_EN);
- gpio_tlmm_config(EXT_TSP_SCL);
- gpio_tlmm_config(EXT_TSP_SDA);
- gpio_tlmm_config(LED_RST);
-
- gpio_out(LED_RST, GPIO_LOW_VALUE);
- clk_busy_wait(10);
-
- gpio_out(LED_26V_EN, GPIO_HIGH_VALUE);
- for (temp = 0; temp < 16; temp++) {
- clk_busy_wait(1000);
- dog_kick();
- }
-
- /* Initialize the Host & Target for ISSP operations */
- printk(KERN_DEBUG"fXRESInitializeTargetForISSP Start\n");
-
- /*INTLOCK(); */
- local_save_flags(flags);
- local_irq_disable();
- fIsError = fXRESInitializeTargetForISSP();
- if (fIsError) {
- ErrorTrap(fIsError);
- return fIsError;
- }
- /*INTFREE(); */
-#else
- /*INTLOCK(); */
- /*local_irq_save(flags);*/
- /* Initialize the Host & Target for ISSP operations */
- fIsError = fPowerCycleInitializeTargetForISSP();
- if (fIsError) {
- ErrorTrap(fIsError);
- return fIsError;
- }
- /*INTFREE(); */
-#endif /* RESET_MODE */
-
-#if 0 /* issp_test_2010 block */
- printk(KERN_DEBUG"fXRESInitializeTargetForISSP END\n");
-
- /* Run the SiliconID Verification, and proceed according to result. */
- printk(KERN_DEBUG"fVerifySiliconID START\n");
-#endif
-
- /*INTLOCK(); */
- /* issp_test_20100709 unblock */
- fVerifySiliconID();
-#if 0
- fIsError = fVerifySiliconID();
- if (fIsError) {
- ErrorTrap(fIsError);
- return fIsError;
- }
-#endif
-
- /*INTFREE(); */
- /*local_irq_restore(flags);*/
- /*printk(KERN_DEBUG"fVerifySiliconID END\n"); */
-
- /* Bulk-Erase the Device. */
- /*printk(KERN_DEBUG"fEraseTarget START\n"); */
- /*INTLOCK(); */
- fIsError = fEraseTarget();
- /*local_irq_save(flags);*/
- if (fIsError) {
- ErrorTrap(fIsError);
- return fIsError;
- }
- /*INTFREE(); */
- /*local_irq_restore(flags);*/
- /*printk(KERN_DEBUG"fEraseTarget END\n"); */
-
-/*==============================================================
-Program Flash blocks with predetermined data.
-In the final application
-this data should come from the HEX output of PSoC Designer.*/
- /*printk(KERN_DEBUG"Program Flash Blocks Start\n");*/
-
- /* Calculte the device checksum as you go*/
- iChecksumData = 0;
- /*PTJ: NUM_BANKS should be 1 for Krypton*/
- for (bBankCounter = 0; bBankCounter < NUM_BANKS; bBankCounter++) {
- /*local_irq_save(flags);*/
- for (iBlockCounter = 0; iBlockCounter < BLOCKS_PER_BANK;
- iBlockCounter++) {
- /*printk(KERN_DEBUG
- "Program Loop : iBlockCounter %d\n",
- iBlockCounter); */
- /*INTLOCK(); */
- /* local_irq_save(flags); */
-
- /*PTJ: READ-WRITE-SETUP used here
- to select SRAM Bank 1, and TSYNC Enable */
-#ifdef CY8C20x66
- fIsError = fSyncEnable();
- if (fIsError) {
- ErrorTrap(fIsError);
- return fIsError;
- }
- fIsError = fReadWriteSetup();
- if (fIsError) {
- ErrorTrap(fIsError);
- return fIsError;
- }
-#endif
-
- iChecksumData += iLoadTarget();
-
- /*dog_kick(); */
- fIsError = fProgramTargetBlock(bBankCounter,
- (unsigned char)iBlockCounter);
- if (fIsError) {
- ErrorTrap(fIsError);
- return fIsError;
- }
- /*PTJ: READ-STATUS after PROGRAM-AND-VERIFY */
-#ifdef CY8C20x66
- fIsError = fReadStatus();
- if (fIsError) {
- ErrorTrap(fIsError);
- return fIsError;
- }
-#endif
- /*INTFREE(); */
- /*local_irq_restore(flags);*/
- }
- /*local_irq_restore(flags);*/
- }
-
- /*printk(KERN_DEBUG"\r\n Program Flash Blocks End\n"); */
-
-#if 0 /* verify check pass or check. */
- printk(KERN_DEBUG"\r\n Verify Start", 0, 0, 0);
- /*=======================================================
- PTJ: Doing Verify
- PTJ: this code isnt needed in the program flow
- because we use PROGRAM-AND-VERIFY (ProgramAndVerify SROM Func)
- PTJ: which has Verify built into it.
- Verify included for completeness in case host desires
- to do a stand-alone verify at a later date.*/
- for (bBankCounter = 0; bBankCounter < NUM_BANKS; bBankCounter++) {
- for (iBlockCounter = 0; iBlockCounter < BLOCKS_PER_BANK;
- iBlockCounter++) {
- printk(KERN_DEBUG"Verify Loop: iBlockCounter %d",
- iBlockCounter, 0, 0);
- INTLOCK();
-
- /*PTJ: READ-WRITE-SETUP used here
- to select SRAM Bank 1, and TSYNC Enable */
-#ifdef CY8C20x66
- fIsError = fReadWriteSetup();
- if (fIsError)
- ErrorTrap(fIsError);
-#endif
-
- dog_kick();
-
- fIsError =
- fVerifySetup(bBankCounter,
- (unsigned char)iBlockCounter);
- if (fIsError)
- ErrorTrap(fIsError);
-#ifdef CY8C20x66 /*PTJ: READ-STATUS after VERIFY-SETUP */
- /*PTJ: 307, added for tsync enable testing */
- fIsError = fSyncEnable();
- if (fIsError)
- ErrorTrap(fIsError);
- fIsError = fReadStatus();
- if (fIsError)
- ErrorTrap(fIsError);
- /*PTJ: READ-WRITE-SETUP used here
- to select SRAM Bank 1, and TSYNC Enable */
- fIsError = fReadWriteSetup();
- if (fIsError)
- ErrorTrap(fIsError);
- /*PTJ: 307, added for tsync enable testing */
- fIsError = fSyncDisable();
- if (fIsError)
- ErrorTrap(fIsError);
-#endif
- INTFREE();
- }
- }
- printk(KERN_DEBUG"Verify End", 0, 0, 0);
-#endif /* #if 1 */
-#if 1 /* security start */
- /*=======================================================
- program security data into target psoc.
- in the final application this data should
- come from the hex output of psoc designer.
- printk(KERN_DEBUG"program security data start\n");*/
- /*INTLOCK(); */
- /*local_irq_save(flags);*/
- for (bBankCounter = 0; bBankCounter < NUM_BANKS; bBankCounter++) {
- /*PTJ: READ-WRITE-SETUP used here to select SRAM Bank 1 */
-#ifdef CY8C20x66
- /*PTJ: 307, added for tsync enable testing */
- fIsError = fSyncEnable();
- if (fIsError) {
- ErrorTrap(fIsError);
- return fIsError;
- }
- fIsError = fReadWriteSetup();
- if (fIsError) {
- ErrorTrap(fIsError);
- return fIsError;
- }
-#endif
- /* Load one bank of security data from hex file into buffer */
- fIsError = fLoadSecurityData(bBankCounter);
- if (fIsError) {
- ErrorTrap(fIsError);
- return fIsError;
- }
- /* Secure one bank of the target flash */
- fIsError = fSecureTargetFlash();
- if (fIsError) {
- ErrorTrap(fIsError);
- return fIsError;
- }
- }
- /*INTFREE(); */
- /*local_irq_restore(flags);*/
-
- /*printk(KERN_DEBUG"Program security data END\n"); */
-
- /*==============================================================
- PTJ: Do READ-SECURITY after SECURE
- Load one bank of security data from hex file into buffer
- loads abTargetDataOUT[] with security data
- that was used in secure bit stream*/
- /*INTLOCK(); */
- /*local_irq_save(flags);*/
- fIsError = fLoadSecurityData(bBankCounter);
- if (fIsError) {
- ErrorTrap(fIsError);
- return fIsError;
- }
-#ifdef CY8C20x66
- fIsError = fReadSecurity();
- if (fIsError) {
- ErrorTrap(fIsError);
- return fIsError;
- }
-#endif
- /*INTFREE(); */
- /*local_irq_restore(flags);*/
- /*printk(KERN_DEBUG"Load security data END\n"); */
-#endif /* security end */
-
- /*=======================================================
- PTJ: Doing Checksum after READ-SECURITY*/
- /*INTLOCK(); */
- /*local_irq_save(flags);*/
- iChecksumTarget = 0;
- for (bBankCounter = 0; bBankCounter < NUM_BANKS; bBankCounter++) {
- fIsError = fAccTargetBankChecksum(&iChecksumTarget);
- if (fIsError) {
- ErrorTrap(fIsError);
- return fIsError;
- }
- }
-
- /*INTFREE(); */
- /*local_irq_restore(flags);*/
-
- /*printk(KERN_DEBUG"Checksum : iChecksumTarget (0x%X)\n",
- (unsigned char)iChecksumTarget);
- printk ("Checksum : iChecksumData (0x%X)\n",
- (unsigned char)iChecksumData); */
-
- if ((unsigned short)(iChecksumTarget & 0xffff) !=
- (unsigned short)(iChecksumData & 0xffff)) {
- ErrorTrap(VERIFY_ERROR);
- return fIsError;
- }
- /*printk(KERN_DEBUG"Doing Checksum END\n");*/
-
- /**** SUCCESS ***
- At this point, the Target has been successfully Initialize,
- ID-Checked, Bulk-Erased, Block-Loaded,
- Block-Programmed, Block-Verified,
- and Device- Checksum Verified.*/
-
- /* You may want to restart Your Target PSoC Here. */
- ReStartTarget();
-
- /*printk(KERN_DEBUG"ReStartTarget\n"); */
-
- return 0;
-}
-
-#endif /*(PROJECT_REV_) end of file main.c */