kernel-brax3-ubuntu-touch/drivers/misc/mediatek/apusys/reviser/2.0/common/reviser_power.c
erascape f319b992b1 kernel-5.15: Initial import brax3 UT kernel
* halium configs enabled

Signed-off-by: erascape <erascape@proton.me>
2025-09-23 15:17:10 +00:00

86 lines
1.6 KiB
C

// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (c) 2020 MediaTek Inc.
*/
#include <linux/platform_device.h>
#include "reviser_cmn.h"
#include "reviser_power.h"
#include "reviser_drv.h"
#include "apusys_power.h"
bool reviser_is_power(void *drvinfo)
{
struct reviser_dev_info *rdv = NULL;
unsigned long flags;
bool is_power = false;
DEBUG_TAG;
if (drvinfo == NULL) {
LOG_ERR("invalid argument\n");
return is_power;
}
rdv = (struct reviser_dev_info *)drvinfo;
spin_lock_irqsave(&rdv->lock.lock_power, flags);
if (rdv->power.power) {
//LOG_ERR("Can Not Read when power disable\n");
is_power = true;
}
spin_unlock_irqrestore(&rdv->lock.lock_power, flags);
return is_power;
}
int reviser_power_on(void *drvinfo)
{
struct reviser_dev_info *rdv = NULL;
int ret = 0;
rdv = (struct reviser_dev_info *)drvinfo;
mutex_lock(&rdv->lock.mutex_power);
if (rdv->power.power_count == 0) {
ret = apu_device_power_on(REVISER);
if (ret < 0)
LOG_ERR("PowerON Fail (%d)\n", ret);
}
rdv->power.power_count++;
mutex_unlock(&rdv->lock.mutex_power);
return ret;
}
int reviser_power_off(void *drvinfo)
{
struct reviser_dev_info *rdv = NULL;
int ret = 0;
rdv = (struct reviser_dev_info *)drvinfo;
mutex_lock(&rdv->lock.mutex_power);
rdv->power.power_count--;
if (rdv->power.power_count < 0) {
LOG_ERR("Power count invalid (%d)\n",
rdv->power.power_count);
ret = -EINVAL;
mutex_unlock(&rdv->lock.mutex_power);
return ret;
} else if (rdv->power.power_count == 0) {
ret = apu_device_power_off(REVISER);
if (ret < 0)
LOG_ERR("PowerON Fail (%d)\n", ret);
}
mutex_unlock(&rdv->lock.mutex_power);
return ret;
}