1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- // SPDX-License-Identifier: GPL-2.0
- /*
- * Intel BayTrail PMIC I2C bus semaphore implementation
- * Copyright (c) 2014, Intel Corporation.
- */
- #include <linux/device.h>
- #include <linux/acpi.h>
- #include <linux/i2c.h>
- #include <linux/interrupt.h>
- #include <asm/iosf_mbi.h>
- #include "i2c-designware-core.h"
- int i2c_dw_baytrail_probe_lock_support(struct dw_i2c_dev *dev)
- {
- acpi_status status;
- unsigned long long shared_host = 0;
- acpi_handle handle;
- if (!dev)
- return -ENODEV;
- handle = ACPI_HANDLE(dev->dev);
- if (!handle)
- return -ENODEV;
- status = acpi_evaluate_integer(handle, "_SEM", NULL, &shared_host);
- if (ACPI_FAILURE(status))
- return -ENODEV;
- if (!shared_host)
- return -ENODEV;
- if (!iosf_mbi_available())
- return -EPROBE_DEFER;
- dev_info(dev->dev, "I2C bus managed by PUNIT\n");
- dev->acquire_lock = iosf_mbi_block_punit_i2c_access;
- dev->release_lock = iosf_mbi_unblock_punit_i2c_access;
- dev->shared_with_punit = true;
- return 0;
- }
|