1a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/* 2a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * host_platform.c 3a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * 4a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved. 5a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * All rights reserved. 6a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * 7a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Redistribution and use in source and binary forms, with or without 8a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * modification, are permitted provided that the following conditions 9a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * are met: 10a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * 11a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * * Redistributions of source code must retain the above copyright 12a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * notice, this list of conditions and the following disclaimer. 13a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * * Redistributions in binary form must reproduce the above copyright 14a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * notice, this list of conditions and the following disclaimer in 15a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * the documentation and/or other materials provided with the 16a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * distribution. 17a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * * Neither the name Texas Instruments nor the names of its 18a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * contributors may be used to endorse or promote products derived 19a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * from this software without specific prior written permission. 20a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * 21a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */ 33a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "tidef.h" 34a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include <linux/kernel.h> 35a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include <asm/io.h> 36a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include <linux/delay.h> 37a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include <linux/platform_device.h> 38a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include <linux/wifi_tiwlan.h> 39a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 40a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "host_platform.h" 41a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "ioctl_init.h" 42a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "WlanDrvIf.h" 43a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "Device1273.h" 44a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 45ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt#define OS_API_MEM_ADDR 0x0000000 46ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt#define OS_API_REG_ADDR 0x0300000 47a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#define SDIO_ATTEMPT_LONGER_DELAY_LINUX 150 48a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 49a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic struct wifi_platform_data *wifi_control_data = NULL; 50a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic struct resource *wifi_irqres = NULL; 51a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 52a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic int wifi_probe( struct platform_device *pdev ) 53a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{ 54a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt struct wifi_platform_data *wifi_ctrl = (struct wifi_platform_data *)(pdev->dev.platform_data); 55a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 56ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt /* printk("%s\n", __FUNCTION__); */ 57a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt wifi_irqres = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "device_wifi_irq"); 58ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt#if 0 59ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt if (wifi_irqres) { 60ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt printk("wifi_irqres->start = %lu\n", (unsigned long)(wifi_irqres->start)); 61ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt printk("wifi_irqres->flags = %lx\n", wifi_irqres->flags); 62ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt } 63ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt#endif 64a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt if( wifi_ctrl ) { 65a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt wifi_control_data = wifi_ctrl; 66ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt#if 0 67ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt if( wifi_ctrl->set_power ) 68ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt wifi_ctrl->set_power(1); /* Power On */ 69ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt if( wifi_ctrl->set_reset ) 70ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt wifi_ctrl->set_reset(0); /* Reset clear */ 71ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt if( wifi_ctrl->set_carddetect ) 72ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt wifi_ctrl->set_carddetect(1); /* CardDetect (0->1) */ 73ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt#endif 74a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt } 75a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt return 0; 76a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} 77ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt 78a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic int wifi_remove( struct platform_device *pdev ) 79a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{ 80a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt struct wifi_platform_data *wifi_ctrl = (struct wifi_platform_data *)(pdev->dev.platform_data); 81a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 82ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt /* printk("%s\n", __FUNCTION__); */ 83a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt if( wifi_ctrl ) { 84a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt if( wifi_ctrl->set_carddetect ) 85a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt wifi_ctrl->set_carddetect(0); /* CardDetect (1->0) */ 86a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt if( wifi_ctrl->set_reset ) 87a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt wifi_ctrl->set_reset(1); /* Reset active */ 88a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt if( wifi_ctrl->set_power ) 89a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt wifi_ctrl->set_power(0); /* Power Off */ 90a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt } 91a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt return 0; 92a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} 93a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 94a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic struct platform_driver wifi_device = { 95a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt .probe = wifi_probe, 96a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt .remove = wifi_remove, 97a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt .suspend = NULL, 98a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt .resume = NULL, 99a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt .driver = { 100a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt .name = "device_wifi", 101a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt }, 102a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}; 103a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 104a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic int wifi_add_dev( void ) 105a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{ 106ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt /* printk("%s\n", __FUNCTION__); */ 107a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt return platform_driver_register( &wifi_device ); 108a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} 109a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 110a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic void wifi_del_dev( void ) 111a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{ 112ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt /* printk("%s\n", __FUNCTION__); */ 113a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt platform_driver_unregister( &wifi_device ); 114a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} 115a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 116a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtint wifi_set_carddetect( int on ) 117a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{ 118ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt /* printk("%s = %d\n", __FUNCTION__, on); */ 119a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt if( wifi_control_data && wifi_control_data->set_carddetect ) { 120a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt wifi_control_data->set_carddetect(on); 121a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt } 122a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt return 0; 123a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} 124a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 125ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidtint wifi_set_power( int on, unsigned long msec ) 126a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{ 127ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt /* printk("%s = %d\n", __FUNCTION__, on); */ 128ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt if( wifi_control_data && wifi_control_data->set_power ) { 129ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt wifi_control_data->set_power(on); 130a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt } 131ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt else { 132ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt gpio_set_value(PMENA_GPIO, on); 133ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt } 134ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt if( msec ) 135ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt mdelay(msec); 136ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt return 0; 137a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} 138a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 139ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidtint wifi_set_reset( int on, unsigned long msec ) 140a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{ 141ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt /* printk("%s = %d\n", __FUNCTION__, on); */ 142ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt if( wifi_control_data && wifi_control_data->set_reset ) { 143ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt wifi_control_data->set_reset(on); 144a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt } 145ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt if( msec ) 146ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt mdelay(msec); 147ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt return 0; 148a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} 149a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 150a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*----------------------------------------------------------------------------- 151ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry ShmidtRoutine Name: hPlatform_hardResetTnetw 152ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry ShmidtRoutine Description: set the GPIO to low after awaking the TNET from ELP. 153ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry ShmidtArguments: None 154ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry ShmidtReturn Value: 0 - Ok 155a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt-----------------------------------------------------------------------------*/ 156a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 157ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidtint hPlatform_hardResetTnetw( void ) 158a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{ 159ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt int err; 160a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 161ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt /* Turn power OFF */ 162ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt if ((err = wifi_set_power(0, 15)) == 0) { 163ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt /* Turn power ON*/ 164ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt err = wifi_set_power(1, 70); 165ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt } 166ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt return err; 167a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} /* hPlatform_hardResetTnetw() */ 168a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 169a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/* Turn device power off */ 170ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidtint hPlatform_DevicePowerOff( void ) 171a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{ 172ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt int err; 173ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt 174ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt err = wifi_set_power(0, 15); 175ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt return err; 176a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} 177a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 178a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 179a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/* Turn device power off according to a given delay */ 180a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtint hPlatform_DevicePowerOffSetLongerDelay(void) 181a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{ 182a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt int err; 183a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 184ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt err = wifi_set_power(0, SDIO_ATTEMPT_LONGER_DELAY_LINUX); 185a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 186a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt return err; 187a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} 188a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 189a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/* Turn device power on */ 190ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidtint hPlatform_DevicePowerOn( void ) 191a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{ 192ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt int err; 193a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 194ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt wifi_set_power(1, 15); /* Fixed power sequence */ 195ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt wifi_set_power(0, 1); 196ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt /* Should not be changed, 50 msec cause failures */ 197ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt err = wifi_set_power(1, 70); 198ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt return err; 199a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} 200a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 201ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt/*---------------------------------------------------------------------------*/ 202a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 203ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidtint hPlatform_Wlan_Hardware_Init(void *tnet_drv) 204a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{ 205ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt TWlanDrvIfObj *drv = tnet_drv; 206ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt 207ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt printk("%s\n", __FUNCTION__); 208a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt wifi_add_dev(); 209ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt if (wifi_irqres) { 210ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt drv->irq = wifi_irqres->start; 211ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt drv->irq_flags = wifi_irqres->flags & IRQF_TRIGGER_MASK; 212ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt } 213ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt else { 214ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt drv->irq = TNETW_IRQ; 215ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt drv->irq_flags = (unsigned long)IRQF_TRIGGER_FALLING; 216ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt } 217a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt return 0; 218a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} 219a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 220a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*----------------------------------------------------------------------------- 221a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 222a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRoutine Name: 223a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 224a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt InitInterrupt 225a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 226a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRoutine Description: 227a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 228a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt this function init the interrupt to the Wlan ISR routine. 229a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 230a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtArguments: 231a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 232a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt tnet_drv - Golbal Tnet driver pointer. 233a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 234a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtReturn Value: 235a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 236a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt status 237a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 238a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt-----------------------------------------------------------------------------*/ 239a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 240ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidtint hPlatform_initInterrupt( void *tnet_drv, void* handle_add ) 241a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{ 242a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt TWlanDrvIfObj *drv = tnet_drv; 243a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt int rc; 244ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt 245a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt if (drv->irq == 0 || handle_add == NULL) 246a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt { 247a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt print_err("hPlatform_initInterrupt() bad param drv->irq=%d handle_add=0x%x !!!\n",drv->irq,(int)handle_add); 248a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt return -EINVAL; 249a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt } 250ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt printk("drv->irq = %u, %lx\n", drv->irq, drv->irq_flags); 251ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt if ((rc = request_irq(drv->irq, handle_add, drv->irq_flags, drv->netdev->name, drv))) 252a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt { 253a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt print_err("TIWLAN: Failed to register interrupt handler\n"); 254a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt return rc; 255a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt } 256ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt set_irq_wake(drv->irq, 1); 257a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt return rc; 258a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 259a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} /* hPlatform_initInterrupt() */ 260a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 261a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*--------------------------------------------------------------------------------------*/ 262a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 263ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidtvoid hPlatform_freeInterrupt( void *tnet_drv ) 264a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{ 265ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt TWlanDrvIfObj *drv = tnet_drv; 266ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt 267ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt set_irq_wake(drv->irq, 0); 268ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt free_irq(drv->irq, drv); 269a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} 270a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 271a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**************************************************************************************** 272a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * hPlatform_hwGetRegistersAddr() 273a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt **************************************************************************************** 274a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: 275a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 276a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtARGUMENTS: 277a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 278a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN: 279a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 280a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtNOTES: 281a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*****************************************************************************************/ 282ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidtvoid *hPlatform_hwGetRegistersAddr(TI_HANDLE OsContext) 283a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{ 284ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt return (void *)OS_API_REG_ADDR; 285a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} 286a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 287a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**************************************************************************************** 288a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * hPlatform_hwGetMemoryAddr() 289a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt **************************************************************************************** 290a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: 291a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 292a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtARGUMENTS: 293a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 294a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN: 295a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 296a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtNOTES: 297a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*****************************************************************************************/ 298ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidtvoid *hPlatform_hwGetMemoryAddr(TI_HANDLE OsContext) 299a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{ 300ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt return (void *)OS_API_MEM_ADDR; 301a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} 302a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 303a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt 304a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtvoid hPlatform_Wlan_Hardware_DeInit(void) 305a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{ 306a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt wifi_del_dev(); 307a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt} 308