linux/drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_api_8822b_usb.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/******************************************************************************
   3 *
   4 * Copyright(c) 2016  Realtek Corporation.
   5 *
   6 * Contact Information:
   7 * wlanfae <wlanfae@realtek.com>
   8 * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
   9 * Hsinchu 300, Taiwan.
  10 *
  11 * Larry Finger <Larry.Finger@lwfinger.net>
  12 *
  13 *****************************************************************************/
  14#include "../halmac_88xx_cfg.h"
  15#include "halmac_8822b_cfg.h"
  16
  17/**
  18 * halmac_mac_power_switch_8822b_usb() - switch mac power
  19 * @halmac_adapter : the adapter of halmac
  20 * @halmac_power : power state
  21 * Author : KaiYuan Chang
  22 * Return : enum halmac_ret_status
  23 * More details of status code can be found in prototype document
  24 */
  25enum halmac_ret_status
  26halmac_mac_power_switch_8822b_usb(struct halmac_adapter *halmac_adapter,
  27                                  enum halmac_mac_power halmac_power)
  28{
  29        u8 interface_mask;
  30        u8 value8;
  31        void *driver_adapter = NULL;
  32        struct halmac_api *halmac_api;
  33
  34        if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
  35                return HALMAC_RET_ADAPTER_INVALID;
  36
  37        if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
  38                return HALMAC_RET_API_INVALID;
  39
  40        halmac_api_record_id_88xx(halmac_adapter, HALMAC_API_MAC_POWER_SWITCH);
  41
  42        driver_adapter = halmac_adapter->driver_adapter;
  43        halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
  44
  45        HALMAC_RT_TRACE(
  46                driver_adapter, HALMAC_MSG_PWR, DBG_DMESG,
  47                "halmac_mac_power_switch_88xx_usb halmac_power = %x ==========>\n",
  48                halmac_power);
  49
  50        interface_mask = HALMAC_PWR_INTF_USB_MSK;
  51
  52        value8 = HALMAC_REG_READ_8(halmac_adapter, REG_CR);
  53        if (value8 == 0xEA) {
  54                halmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_OFF;
  55        } else {
  56                if (BIT(0) ==
  57                    (HALMAC_REG_READ_8(halmac_adapter, REG_SYS_STATUS1 + 1) &
  58                     BIT(0)))
  59                        halmac_adapter->halmac_state.mac_power =
  60                                HALMAC_MAC_POWER_OFF;
  61                else
  62                        halmac_adapter->halmac_state.mac_power =
  63                                HALMAC_MAC_POWER_ON;
  64        }
  65
  66        /*Check if power switch is needed*/
  67        if (halmac_power == HALMAC_MAC_POWER_ON &&
  68            halmac_adapter->halmac_state.mac_power == HALMAC_MAC_POWER_ON) {
  69                HALMAC_RT_TRACE(
  70                        driver_adapter, HALMAC_MSG_PWR, DBG_WARNING,
  71                        "halmac_mac_power_switch power state unchange!\n");
  72                return HALMAC_RET_PWR_UNCHANGE;
  73        }
  74        if (halmac_power == HALMAC_MAC_POWER_OFF) {
  75                if (halmac_pwr_seq_parser_88xx(
  76                            halmac_adapter, HALMAC_PWR_CUT_ALL_MSK,
  77                            HALMAC_PWR_FAB_TSMC_MSK, interface_mask,
  78                            halmac_8822b_card_disable_flow) !=
  79                    HALMAC_RET_SUCCESS) {
  80                        pr_err("Handle power off cmd error\n");
  81                        return HALMAC_RET_POWER_OFF_FAIL;
  82                }
  83
  84                halmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_OFF;
  85                halmac_adapter->halmac_state.ps_state =
  86                        HALMAC_PS_STATE_UNDEFINE;
  87                halmac_adapter->halmac_state.dlfw_state = HALMAC_DLFW_NONE;
  88                halmac_init_adapter_dynamic_para_88xx(halmac_adapter);
  89        } else {
  90                if (halmac_pwr_seq_parser_88xx(
  91                            halmac_adapter, HALMAC_PWR_CUT_ALL_MSK,
  92                            HALMAC_PWR_FAB_TSMC_MSK, interface_mask,
  93                            halmac_8822b_card_enable_flow) !=
  94                    HALMAC_RET_SUCCESS) {
  95                        pr_err("Handle power on cmd error\n");
  96                        return HALMAC_RET_POWER_ON_FAIL;
  97                }
  98
  99                HALMAC_REG_WRITE_8(
 100                        halmac_adapter, REG_SYS_STATUS1 + 1,
 101                        HALMAC_REG_READ_8(halmac_adapter, REG_SYS_STATUS1 + 1) &
 102                                ~(BIT(0)));
 103
 104                halmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_ON;
 105                halmac_adapter->halmac_state.ps_state = HALMAC_PS_STATE_ACT;
 106        }
 107
 108        HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_PWR, DBG_DMESG,
 109                        "halmac_mac_power_switch_88xx_usb <==========\n");
 110
 111        return HALMAC_RET_SUCCESS;
 112}
 113
 114/**
 115 * halmac_phy_cfg_8822b_usb() - phy config
 116 * @halmac_adapter : the adapter of halmac
 117 * Author : KaiYuan Chang
 118 * Return : enum halmac_ret_status
 119 * More details of status code can be found in prototype document
 120 */
 121enum halmac_ret_status
 122halmac_phy_cfg_8822b_usb(struct halmac_adapter *halmac_adapter,
 123                         enum halmac_intf_phy_platform platform)
 124{
 125        void *driver_adapter = NULL;
 126        enum halmac_ret_status status = HALMAC_RET_SUCCESS;
 127        struct halmac_api *halmac_api;
 128
 129        if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
 130                return HALMAC_RET_ADAPTER_INVALID;
 131
 132        if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
 133                return HALMAC_RET_API_INVALID;
 134
 135        halmac_api_record_id_88xx(halmac_adapter, HALMAC_API_PHY_CFG);
 136
 137        driver_adapter = halmac_adapter->driver_adapter;
 138        halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
 139
 140        HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_PWR, DBG_DMESG,
 141                        "halmac_phy_cfg ==========>\n");
 142
 143        status = halmac_parse_intf_phy_88xx(halmac_adapter,
 144                                            HALMAC_RTL8822B_USB2_PHY, platform,
 145                                            HAL_INTF_PHY_USB2);
 146
 147        if (status != HALMAC_RET_SUCCESS)
 148                return status;
 149
 150        status = halmac_parse_intf_phy_88xx(halmac_adapter,
 151                                            HALMAC_RTL8822B_USB3_PHY, platform,
 152                                            HAL_INTF_PHY_USB3);
 153
 154        if (status != HALMAC_RET_SUCCESS)
 155                return status;
 156
 157        HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_PWR, DBG_DMESG,
 158                        "halmac_phy_cfg <==========\n");
 159
 160        return HALMAC_RET_SUCCESS;
 161}
 162
 163/**
 164 * halmac_interface_integration_tuning_8822b_usb() - usb interface fine tuning
 165 * @halmac_adapter : the adapter of halmac
 166 * Author : Ivan
 167 * Return : enum halmac_ret_status
 168 * More details of status code can be found in prototype document
 169 */
 170enum halmac_ret_status halmac_interface_integration_tuning_8822b_usb(
 171        struct halmac_adapter *halmac_adapter)
 172{
 173        return HALMAC_RET_SUCCESS;
 174}
 175