blob: 0e9d6a21a0908cb74912908eb5364d5d9cb7b7e9 [file] [log] [blame]
/*
* Copyright (C) 2018 Synaptics Incorporated. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND
* SYNAPTICS EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES,
* INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE, AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY
* INTELLECTUAL PROPERTY RIGHTS. IN NO EVENT SHALL SYNAPTICS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, OR
* CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION WITH THE USE
* OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED AND
* BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF
* COMPETENT JURISDICTION DOES NOT PERMIT THE DISCLAIMER OF DIRECT
* DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' TOTAL CUMULATIVE LIABILITY
* TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. DOLLARS.
*/
#include "Galois_memmap.h"
#include "global.h"
#include "pinmux.h"
#include "gpio.h"
#include "io.h"
#include "SysMgr.h"
#include "apbRegBase.h"
#include "board_config.h"
#include "util.h"
#include "lgpl_printf.h"
#define RA_SET_BITS_GENERIC(ra_base, ra_name, ra_class, bf_name, val) \
io32_set_bits(ra_base + RA_##ra_name, val, LSb32##ra_class##_##bf_name, b##ra_class##_##bf_name)
#define RA_SET_BITS_SIMPLE(ra_base, ra_name, bf_name, val) RA_SET_BITS_GENERIC(ra_base, ra_name, ra_name, bf_name, val)
#define SOC_SET_PINMUX(ra_name, bf_name, val) RA_SET_BITS_GENERIC(MEMMAP_CHIP_CTRL_REG_BASE, ra_name, Gbl_pinMuxCntlBus, bf_name, val)
#define SM_SET_PINMUX(ra_name, bf_name, val) RA_SET_BITS_GENERIC(SOC_SM_SYS_CTRL_REG_BASE, ra_name, smSysCtl_smPinMuxCntlBus, bf_name, val)
void pin_init(void)
{
UNSG32 val = 0;
GPIO_PortSetInOut(5, 1); //TOUCH_IRQ_L Input, active low
GPIO_PortSetInOut(11, 1); //MIC_MUTE_STATUS Input, active high
GPIO_PortWrite(17, 0); //AMP_EN Output, active high, default=inactive low
GPIO_PortSetInOut(41, 1); //PP1350_DDR_FB_33 HiZ, default=HiZ
GPIO_PortWrite(63, 0); //WLAN_EN Output, active high, default=inactive low
/*
// to use i2c, PER_RST_L must be inactive high
GPIO_PortWrite(4, 1); //PER_RST_L Output, active low, default=inactive high
// Wait 10ms
berlin_delay_us(10000);
pinmux_write(TW0_SCL, 0); // set TW0_SCL to gpio35 first
// pulse i2c_clk 9 times to ensure i2c bus is unstuck
for (i = 0; i < 9; i++) {
// Wait 10us
berlin_delay_us(10);
// Set TW0_SCL as output low
GPIO_PortWrite(35, 0);
// Wait 10us
berlin_delay_us(10);
// Set TW0_SCL as input
GPIO_PortSetInOut(35, 1);
}
// configure i2c
// Configure TW0_SCL and TW0_SDA as i2c pins
pinmux_write(TW0_SCL, 1);
pinmux_write(TW0_SDA, 1);
*/
// program default value for PMIC (different value for Bopper)
// i2cset -f -y $bus 0x66 0x00 0x8b ( for Bopper use i2cset -f -y $bus 0x66 0x000x97)
// reset the peripherals for 20ms, no i2c commands allowed during the reset pulse
// Set PER_RST_L output low
GPIO_PortWrite(4, 0);
// Wait 20ms
berlin_delay_us(20000);
// Set PER_RST_L output high
GPIO_PortWrite(4, 1);
// enable WLAN and amplifier
// Set WLAN_EN output high
GPIO_PortWrite(63, 1);
// Disable MCLK
REG_READ32(0xF7440164, &val);
val &= 0xFFFFFFFE;
REG_WRITE32(0xF7440164, val);
// set SOC_AMP_24V_EN to high
GPIO_PortWrite(42, 1);
// end of low level initialisation
}