2021-12-17 11:57:05 +00:00
// SPDX-License-Identifier: GPL-2.0
//
2022-07-11 13:01:29 +03:00
// CS35l41 HDA I2C driver
2021-12-17 11:57:05 +00:00
//
// Copyright 2021 Cirrus Logic, Inc.
//
// Author: Lucas Tanure <tanureal@opensource.cirrus.com>
2022-07-12 18:35:18 +03:00
# include <linux/mod_devicetable.h>
2021-12-17 11:57:05 +00:00
# include <linux/module.h>
# include <linux/i2c.h>
# include "cs35l41_hda.h"
2022-11-18 23:45:33 +01:00
static int cs35l41_hda_i2c_probe ( struct i2c_client * clt )
2021-12-17 11:57:05 +00:00
{
const char * device_name ;
2022-07-11 13:01:29 +03:00
/*
* Compare against the device name so it works for SPI , normal ACPI
* and for ACPI by serial - multi - instantiate matching cases .
2021-12-17 11:57:05 +00:00
*/
if ( strstr ( dev_name ( & clt - > dev ) , " CLSA0100 " ) )
device_name = " CLSA0100 " ;
2022-07-27 10:59:22 +01:00
else if ( strstr ( dev_name ( & clt - > dev ) , " CLSA0101 " ) )
device_name = " CLSA0101 " ;
2021-12-17 11:57:05 +00:00
else if ( strstr ( dev_name ( & clt - > dev ) , " CSC3551 " ) )
device_name = " CSC3551 " ;
else
return - ENODEV ;
return cs35l41_hda_probe ( & clt - > dev , device_name , clt - > addr , clt - > irq ,
2023-12-21 13:25:17 +00:00
devm_regmap_init_i2c ( clt , & cs35l41_regmap_i2c ) , I2C ) ;
2021-12-17 11:57:05 +00:00
}
2022-08-15 10:02:30 +02:00
static void cs35l41_hda_i2c_remove ( struct i2c_client * clt )
2021-12-17 11:57:05 +00:00
{
2022-01-17 23:00:55 +01:00
cs35l41_hda_remove ( & clt - > dev ) ;
2021-12-17 11:57:05 +00:00
}
static const struct i2c_device_id cs35l41_hda_i2c_id [ ] = {
{ " cs35l41-hda " , 0 } ,
{ }
} ;
static const struct acpi_device_id cs35l41_acpi_hda_match [ ] = {
{ " CLSA0100 " , 0 } ,
2022-07-27 10:59:22 +01:00
{ " CLSA0101 " , 0 } ,
2021-12-17 11:57:05 +00:00
{ " CSC3551 " , 0 } ,
2022-07-12 18:35:18 +03:00
{ }
2021-12-17 11:57:05 +00:00
} ;
MODULE_DEVICE_TABLE ( acpi , cs35l41_acpi_hda_match ) ;
static struct i2c_driver cs35l41_i2c_driver = {
. driver = {
. name = " cs35l41-hda " ,
2022-07-12 18:35:18 +03:00
. acpi_match_table = cs35l41_acpi_hda_match ,
2022-06-30 01:23:30 +01:00
. pm = & cs35l41_hda_pm_ops ,
2021-12-17 11:57:05 +00:00
} ,
. id_table = cs35l41_hda_i2c_id ,
2023-05-25 22:36:40 +02:00
. probe = cs35l41_hda_i2c_probe ,
2021-12-17 11:57:05 +00:00
. remove = cs35l41_hda_i2c_remove ,
} ;
module_i2c_driver ( cs35l41_i2c_driver ) ;
MODULE_DESCRIPTION ( " HDA CS35L41 driver " ) ;
2022-01-17 16:08:27 +00:00
MODULE_IMPORT_NS ( SND_HDA_SCODEC_CS35L41 ) ;
2021-12-17 11:57:05 +00:00
MODULE_AUTHOR ( " Lucas Tanure <tanureal@opensource.cirrus.com> " ) ;
MODULE_LICENSE ( " GPL " ) ;