cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

cs35l41_hda_i2c.c (1681B)


      1// SPDX-License-Identifier: GPL-2.0
      2//
      3// cs35l41.c -- CS35l41 HDA I2C driver
      4//
      5// Copyright 2021 Cirrus Logic, Inc.
      6//
      7// Author: Lucas Tanure <tanureal@opensource.cirrus.com>
      8
      9#include <linux/module.h>
     10#include <linux/i2c.h>
     11#include <linux/acpi.h>
     12
     13#include "cs35l41_hda.h"
     14
     15static int cs35l41_hda_i2c_probe(struct i2c_client *clt, const struct i2c_device_id *id)
     16{
     17	const char *device_name;
     18
     19	/* Compare against the device name so it works for I2C, normal ACPI
     20	 * and for ACPI by i2c-multi-instantiate matching cases
     21	 */
     22	if (strstr(dev_name(&clt->dev), "CLSA0100"))
     23		device_name = "CLSA0100";
     24	else if (strstr(dev_name(&clt->dev), "CSC3551"))
     25		device_name = "CSC3551";
     26	else
     27		return -ENODEV;
     28
     29	return cs35l41_hda_probe(&clt->dev, device_name, clt->addr, clt->irq,
     30				 devm_regmap_init_i2c(clt, &cs35l41_regmap_i2c));
     31}
     32
     33static int cs35l41_hda_i2c_remove(struct i2c_client *clt)
     34{
     35	cs35l41_hda_remove(&clt->dev);
     36
     37	return 0;
     38}
     39
     40static const struct i2c_device_id cs35l41_hda_i2c_id[] = {
     41	{ "cs35l41-hda", 0 },
     42	{}
     43};
     44
     45#ifdef CONFIG_ACPI
     46static const struct acpi_device_id cs35l41_acpi_hda_match[] = {
     47	{"CLSA0100", 0 },
     48	{"CSC3551", 0 },
     49	{ },
     50};
     51MODULE_DEVICE_TABLE(acpi, cs35l41_acpi_hda_match);
     52#endif
     53
     54static struct i2c_driver cs35l41_i2c_driver = {
     55	.driver = {
     56		.name		= "cs35l41-hda",
     57		.acpi_match_table = ACPI_PTR(cs35l41_acpi_hda_match),
     58	},
     59	.id_table	= cs35l41_hda_i2c_id,
     60	.probe		= cs35l41_hda_i2c_probe,
     61	.remove		= cs35l41_hda_i2c_remove,
     62};
     63module_i2c_driver(cs35l41_i2c_driver);
     64
     65MODULE_DESCRIPTION("HDA CS35L41 driver");
     66MODULE_IMPORT_NS(SND_HDA_SCODEC_CS35L41);
     67MODULE_AUTHOR("Lucas Tanure <tanureal@opensource.cirrus.com>");
     68MODULE_LICENSE("GPL");