162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Intel BayTrail PMIC I2C bus semaphore implementation
462306a36Sopenharmony_ci * Copyright (c) 2014, Intel Corporation.
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci#include <linux/device.h>
762306a36Sopenharmony_ci#include <linux/acpi.h>
862306a36Sopenharmony_ci#include <linux/i2c.h>
962306a36Sopenharmony_ci#include <linux/interrupt.h>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <asm/iosf_mbi.h>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#include "i2c-designware-core.h"
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ciint i2c_dw_baytrail_probe_lock_support(struct dw_i2c_dev *dev)
1662306a36Sopenharmony_ci{
1762306a36Sopenharmony_ci	acpi_status status;
1862306a36Sopenharmony_ci	unsigned long long shared_host = 0;
1962306a36Sopenharmony_ci	acpi_handle handle;
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci	if (!dev)
2262306a36Sopenharmony_ci		return -ENODEV;
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci	handle = ACPI_HANDLE(dev->dev);
2562306a36Sopenharmony_ci	if (!handle)
2662306a36Sopenharmony_ci		return -ENODEV;
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci	status = acpi_evaluate_integer(handle, "_SEM", NULL, &shared_host);
2962306a36Sopenharmony_ci	if (ACPI_FAILURE(status))
3062306a36Sopenharmony_ci		return -ENODEV;
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci	if (!shared_host)
3362306a36Sopenharmony_ci		return -ENODEV;
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci	if (!iosf_mbi_available())
3662306a36Sopenharmony_ci		return -EPROBE_DEFER;
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci	dev_info(dev->dev, "I2C bus managed by PUNIT\n");
3962306a36Sopenharmony_ci	dev->acquire_lock = iosf_mbi_block_punit_i2c_access;
4062306a36Sopenharmony_ci	dev->release_lock = iosf_mbi_unblock_punit_i2c_access;
4162306a36Sopenharmony_ci	dev->shared_with_punit = true;
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci	return 0;
4462306a36Sopenharmony_ci}
45