2020-07-14 15:01:55 +03:00
// SPDX-License-Identifier: GPL-2.0+
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
/*
2020-07-14 15:01:55 +03:00
* Mellanox hotplug driver
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
*
2020-07-14 15:01:55 +03:00
* Copyright ( C ) 2016 - 2020 Mellanox Technologies
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
*/
# include <linux/bitops.h>
# include <linux/device.h>
# include <linux/hwmon.h>
# include <linux/hwmon-sysfs.h>
# include <linux/i2c.h>
# include <linux/interrupt.h>
# include <linux/module.h>
2018-01-23 06:55:11 +03:00
# include <linux/of_device.h>
2018-01-17 21:21:53 +03:00
# include <linux/platform_data/mlxreg.h>
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
# include <linux/platform_device.h>
# include <linux/spinlock.h>
2020-07-14 15:01:57 +03:00
# include <linux/string_helpers.h>
2018-01-23 06:55:11 +03:00
# include <linux/regmap.h>
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
# include <linux/workqueue.h>
2018-01-23 06:55:11 +03:00
/* Offset of event and mask registers from status register. */
2018-01-17 21:21:53 +03:00
# define MLXREG_HOTPLUG_EVENT_OFF 1
2018-01-23 06:55:11 +03:00
# define MLXREG_HOTPLUG_MASK_OFF 2
2018-01-17 21:21:53 +03:00
# define MLXREG_HOTPLUG_AGGR_MASK_OFF 1
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
2018-07-27 01:40:58 +03:00
/* ASIC good health mask. */
# define MLXREG_HOTPLUG_GOOD_HEALTH_MASK 0x02
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
2021-10-02 12:32:32 +03:00
# define MLXREG_HOTPLUG_ATTRS_MAX 128
2018-05-07 09:48:51 +03:00
# define MLXREG_HOTPLUG_NOT_ASSERT 3
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
/**
2018-01-17 21:21:53 +03:00
* struct mlxreg_hotplug_priv_data - platform private data :
2018-01-23 06:55:11 +03:00
* @ irq : platform device interrupt number ;
2018-03-27 13:02:02 +03:00
* @ dev : basic device ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
* @ pdev : platform device ;
* @ plat : platform data ;
2018-03-27 13:02:02 +03:00
* @ regmap : register map handle ;
* @ dwork_irq : delayed work template ;
2018-01-23 06:55:11 +03:00
* @ lock : spin lock ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
* @ hwmon : hwmon device ;
2018-01-17 21:21:53 +03:00
* @ mlxreg_hotplug_attr : sysfs attributes array ;
* @ mlxreg_hotplug_dev_attr : sysfs sensor device attribute array ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
* @ group : sysfs attribute group ;
* @ groups : list of sysfs attribute group for hwmon registration ;
2018-01-23 06:55:11 +03:00
* @ cell : location of top aggregation interrupt register ;
* @ mask : top aggregation interrupt common mask ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
* @ aggr_cache : last value of aggregation register status ;
2018-03-27 13:02:02 +03:00
* @ after_probe : flag indication probing completion ;
2018-05-07 09:48:51 +03:00
* @ not_asserted : number of entries in workqueue with no signal assertion ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
*/
2018-01-17 21:21:53 +03:00
struct mlxreg_hotplug_priv_data {
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
int irq ;
2018-01-23 06:55:11 +03:00
struct device * dev ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
struct platform_device * pdev ;
2018-01-17 21:21:53 +03:00
struct mlxreg_hotplug_platform_data * plat ;
2018-01-23 06:55:11 +03:00
struct regmap * regmap ;
struct delayed_work dwork_irq ;
spinlock_t lock ; /* sync with interrupt */
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
struct device * hwmon ;
2018-01-23 06:55:11 +03:00
struct attribute * mlxreg_hotplug_attr [ MLXREG_HOTPLUG_ATTRS_MAX + 1 ] ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
struct sensor_device_attribute_2
2018-01-23 06:55:11 +03:00
mlxreg_hotplug_dev_attr [ MLXREG_HOTPLUG_ATTRS_MAX ] ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
struct attribute_group group ;
const struct attribute_group * groups [ 2 ] ;
2018-01-23 06:55:11 +03:00
u32 cell ;
u32 mask ;
u32 aggr_cache ;
bool after_probe ;
2018-05-07 09:48:51 +03:00
u8 not_asserted ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
} ;
2020-07-14 15:01:57 +03:00
/* Environment variables array for udev. */
static char * mlxreg_hotplug_udev_envp [ ] = { NULL , NULL } ;
static int
mlxreg_hotplug_udev_event_send ( struct kobject * kobj ,
struct mlxreg_core_data * data , bool action )
{
char event_str [ MLXREG_CORE_LABEL_MAX_SIZE + 2 ] ;
char label [ MLXREG_CORE_LABEL_MAX_SIZE ] = { 0 } ;
mlxreg_hotplug_udev_envp [ 0 ] = event_str ;
string_upper ( label , data - > label ) ;
snprintf ( event_str , MLXREG_CORE_LABEL_MAX_SIZE , " %s=%d " , label , ! ! action ) ;
return kobject_uevent_env ( kobj , KOBJ_CHANGE , mlxreg_hotplug_udev_envp ) ;
}
2021-10-02 12:32:32 +03:00
static void
mlxreg_hotplug_pdata_export ( void * pdata , void * regmap )
{
struct mlxreg_core_hotplug_platform_data * dev_pdata = pdata ;
/* Export regmap to underlying device. */
dev_pdata - > regmap = regmap ;
}
2018-02-14 01:09:35 +03:00
static int mlxreg_hotplug_device_create ( struct mlxreg_hotplug_priv_data * priv ,
2021-10-02 12:32:32 +03:00
struct mlxreg_core_data * data ,
enum mlxreg_hotplug_kind kind )
2018-01-23 05:50:20 +03:00
{
2021-10-02 12:32:32 +03:00
struct i2c_board_info * brdinfo = data - > hpdev . brdinfo ;
2018-02-14 01:09:36 +03:00
struct mlxreg_core_hotplug_platform_data * pdata ;
2020-03-27 00:09:52 +03:00
struct i2c_client * client ;
2018-02-14 01:09:36 +03:00
2018-07-27 01:40:59 +03:00
/* Notify user by sending hwmon uevent. */
2020-07-14 15:01:57 +03:00
mlxreg_hotplug_udev_event_send ( & priv - > hwmon - > kobj , data , true ) ;
2018-07-27 01:40:59 +03:00
2018-01-26 22:03:45 +03:00
/*
* Return if adapter number is negative . It could be in case hotplug
* event is not associated with hotplug device .
*/
if ( data - > hpdev . nr < 0 )
return 0 ;
2018-02-14 01:09:36 +03:00
pdata = dev_get_platdata ( & priv - > pdev - > dev ) ;
2021-10-02 12:32:32 +03:00
switch ( data - > hpdev . action ) {
case MLXREG_HOTPLUG_DEVICE_DEFAULT_ACTION :
data - > hpdev . adapter = i2c_get_adapter ( data - > hpdev . nr +
pdata - > shift_nr ) ;
if ( ! data - > hpdev . adapter ) {
dev_err ( priv - > dev , " Failed to get adapter for bus %d \n " ,
data - > hpdev . nr + pdata - > shift_nr ) ;
return - EFAULT ;
}
2018-01-23 05:50:20 +03:00
2021-10-02 12:32:32 +03:00
/* Export platform data to underlying device. */
if ( brdinfo - > platform_data )
mlxreg_hotplug_pdata_export ( brdinfo - > platform_data , pdata - > regmap ) ;
2018-01-23 06:55:11 +03:00
2021-10-02 12:32:32 +03:00
client = i2c_new_client_device ( data - > hpdev . adapter ,
brdinfo ) ;
if ( IS_ERR ( client ) ) {
dev_err ( priv - > dev , " Failed to create client %s at bus %d at addr 0x%02x \n " ,
brdinfo - > type , data - > hpdev . nr +
pdata - > shift_nr , brdinfo - > addr ) ;
i2c_put_adapter ( data - > hpdev . adapter ) ;
data - > hpdev . adapter = NULL ;
return PTR_ERR ( client ) ;
}
data - > hpdev . client = client ;
break ;
case MLXREG_HOTPLUG_DEVICE_PLATFORM_ACTION :
/* Export platform data to underlying device. */
if ( data - > hpdev . brdinfo & & data - > hpdev . brdinfo - > platform_data )
mlxreg_hotplug_pdata_export ( data - > hpdev . brdinfo - > platform_data ,
pdata - > regmap ) ;
/* Pass parent hotplug device handle to underlying device. */
data - > notifier = data - > hpdev . notifier ;
data - > hpdev . pdev = platform_device_register_resndata ( & priv - > pdev - > dev ,
brdinfo - > type ,
data - > hpdev . nr ,
NULL , 0 , data ,
sizeof ( * data ) ) ;
if ( IS_ERR ( data - > hpdev . pdev ) )
return PTR_ERR ( data - > hpdev . pdev ) ;
break ;
default :
break ;
2018-01-23 05:50:20 +03:00
}
2021-10-02 12:32:32 +03:00
if ( data - > hpdev . notifier & & data - > hpdev . notifier - > user_handler )
return data - > hpdev . notifier - > user_handler ( data - > hpdev . notifier - > handle , kind , 1 ) ;
2020-03-27 00:09:52 +03:00
2018-01-23 05:50:20 +03:00
return 0 ;
}
2018-07-27 01:40:59 +03:00
static void
mlxreg_hotplug_device_destroy ( struct mlxreg_hotplug_priv_data * priv ,
2021-10-02 12:32:32 +03:00
struct mlxreg_core_data * data ,
enum mlxreg_hotplug_kind kind )
2018-01-23 05:50:20 +03:00
{
2018-07-27 01:40:59 +03:00
/* Notify user by sending hwmon uevent. */
2020-07-14 15:01:57 +03:00
mlxreg_hotplug_udev_event_send ( & priv - > hwmon - > kobj , data , false ) ;
2021-10-02 12:32:32 +03:00
if ( data - > hpdev . notifier & & data - > hpdev . notifier - > user_handler )
data - > hpdev . notifier - > user_handler ( data - > hpdev . notifier - > handle , kind , 0 ) ;
switch ( data - > hpdev . action ) {
case MLXREG_HOTPLUG_DEVICE_DEFAULT_ACTION :
if ( data - > hpdev . client ) {
i2c_unregister_device ( data - > hpdev . client ) ;
data - > hpdev . client = NULL ;
}
2018-07-27 01:40:59 +03:00
2021-10-02 12:32:32 +03:00
if ( data - > hpdev . adapter ) {
i2c_put_adapter ( data - > hpdev . adapter ) ;
data - > hpdev . adapter = NULL ;
}
break ;
case MLXREG_HOTPLUG_DEVICE_PLATFORM_ACTION :
if ( data - > hpdev . pdev )
platform_device_unregister ( data - > hpdev . pdev ) ;
break ;
default :
break ;
2018-01-23 05:50:20 +03:00
}
}
2018-01-17 21:21:53 +03:00
static ssize_t mlxreg_hotplug_attr_show ( struct device * dev ,
struct device_attribute * attr ,
char * buf )
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
{
2018-01-23 06:55:11 +03:00
struct mlxreg_hotplug_priv_data * priv = dev_get_drvdata ( dev ) ;
struct mlxreg_core_hotplug_platform_data * pdata ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
int index = to_sensor_dev_attr_2 ( attr ) - > index ;
int nr = to_sensor_dev_attr_2 ( attr ) - > nr ;
2018-01-23 06:55:11 +03:00
struct mlxreg_core_item * item ;
struct mlxreg_core_data * data ;
u32 regval ;
int ret ;
pdata = dev_get_platdata ( & priv - > pdev - > dev ) ;
item = pdata - > items + nr ;
data = item - > data + index ;
ret = regmap_read ( priv - > regmap , data - > reg , & regval ) ;
if ( ret )
return ret ;
if ( item - > health ) {
regval & = data - > mask ;
} else {
/* Bit = 0 : functional if item->inversed is true. */
if ( item - > inversed )
regval = ! ( regval & data - > mask ) ;
else
regval = ! ! ( regval & data - > mask ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
}
2018-01-23 06:55:11 +03:00
return sprintf ( buf , " %u \n " , regval ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
}
2018-01-17 21:21:53 +03:00
# define PRIV_ATTR(i) priv->mlxreg_hotplug_attr[i]
# define PRIV_DEV_ATTR(i) priv->mlxreg_hotplug_dev_attr[i]
2018-01-23 06:55:11 +03:00
2018-01-17 21:21:53 +03:00
static int mlxreg_hotplug_attr_init ( struct mlxreg_hotplug_priv_data * priv )
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
{
2018-01-23 06:55:11 +03:00
struct mlxreg_core_hotplug_platform_data * pdata ;
struct mlxreg_core_item * item ;
struct mlxreg_core_data * data ;
2020-07-14 15:01:56 +03:00
unsigned long mask ;
u32 regval ;
int num_attrs = 0 , id = 0 , i , j , k , ret ;
2018-01-23 06:55:11 +03:00
pdata = dev_get_platdata ( & priv - > pdev - > dev ) ;
item = pdata - > items ;
/* Go over all kinds of items - psu, pwr, fan. */
for ( i = 0 ; i < pdata - > counter ; i + + , item + + ) {
2020-07-14 15:01:56 +03:00
if ( item - > capability ) {
/*
* Read group capability register to get actual number
* of interrupt capable components and set group mask
* accordingly .
*/
ret = regmap_read ( priv - > regmap , item - > capability ,
& regval ) ;
if ( ret )
return ret ;
item - > mask = GENMASK ( ( regval & item - > mask ) - 1 , 0 ) ;
}
2018-01-23 06:55:11 +03:00
data = item - > data ;
2020-07-14 15:01:56 +03:00
/* Go over all unmasked units within item. */
mask = item - > mask ;
k = 0 ;
for_each_set_bit ( j , & mask , item - > count ) {
if ( data - > capability ) {
/*
* Read capability register and skip non
* relevant attributes .
*/
ret = regmap_read ( priv - > regmap ,
data - > capability , & regval ) ;
if ( ret )
return ret ;
if ( ! ( regval & data - > bit ) ) {
data + + ;
continue ;
}
}
2018-01-23 06:55:11 +03:00
PRIV_ATTR ( id ) = & PRIV_DEV_ATTR ( id ) . dev_attr . attr ;
PRIV_ATTR ( id ) - > name = devm_kasprintf ( & priv - > pdev - > dev ,
GFP_KERNEL ,
data - > label ) ;
if ( ! PRIV_ATTR ( id ) - > name ) {
dev_err ( priv - > dev , " Memory allocation failed for attr %d. \n " ,
id ) ;
return - ENOMEM ;
}
PRIV_DEV_ATTR ( id ) . dev_attr . attr . name =
PRIV_ATTR ( id ) - > name ;
PRIV_DEV_ATTR ( id ) . dev_attr . attr . mode = 0444 ;
PRIV_DEV_ATTR ( id ) . dev_attr . show =
mlxreg_hotplug_attr_show ;
PRIV_DEV_ATTR ( id ) . nr = i ;
2020-07-14 15:01:56 +03:00
PRIV_DEV_ATTR ( id ) . index = k ;
2018-01-23 06:55:11 +03:00
sysfs_attr_init ( & PRIV_DEV_ATTR ( id ) . dev_attr . attr ) ;
2020-07-14 15:01:56 +03:00
data + + ;
id + + ;
k + + ;
2018-01-23 06:55:11 +03:00
}
2020-07-14 15:01:56 +03:00
num_attrs + = k ;
2018-01-23 06:55:11 +03:00
}
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
treewide: devm_kzalloc() -> devm_kcalloc()
The devm_kzalloc() function has a 2-factor argument form, devm_kcalloc().
This patch replaces cases of:
devm_kzalloc(handle, a * b, gfp)
with:
devm_kcalloc(handle, a * b, gfp)
as well as handling cases of:
devm_kzalloc(handle, a * b * c, gfp)
with:
devm_kzalloc(handle, array3_size(a, b, c), gfp)
as it's slightly less ugly than:
devm_kcalloc(handle, array_size(a, b), c, gfp)
This does, however, attempt to ignore constant size factors like:
devm_kzalloc(handle, 4 * 1024, gfp)
though any constants defined via macros get caught up in the conversion.
Any factors with a sizeof() of "unsigned char", "char", and "u8" were
dropped, since they're redundant.
Some manual whitespace fixes were needed in this patch, as Coccinelle
really liked to write "=devm_kcalloc..." instead of "= devm_kcalloc...".
The Coccinelle script used for this was:
// Fix redundant parens around sizeof().
@@
expression HANDLE;
type TYPE;
expression THING, E;
@@
(
devm_kzalloc(HANDLE,
- (sizeof(TYPE)) * E
+ sizeof(TYPE) * E
, ...)
|
devm_kzalloc(HANDLE,
- (sizeof(THING)) * E
+ sizeof(THING) * E
, ...)
)
// Drop single-byte sizes and redundant parens.
@@
expression HANDLE;
expression COUNT;
typedef u8;
typedef __u8;
@@
(
devm_kzalloc(HANDLE,
- sizeof(u8) * (COUNT)
+ COUNT
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(__u8) * (COUNT)
+ COUNT
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(char) * (COUNT)
+ COUNT
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(unsigned char) * (COUNT)
+ COUNT
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(u8) * COUNT
+ COUNT
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(__u8) * COUNT
+ COUNT
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(char) * COUNT
+ COUNT
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(unsigned char) * COUNT
+ COUNT
, ...)
)
// 2-factor product with sizeof(type/expression) and identifier or constant.
@@
expression HANDLE;
type TYPE;
expression THING;
identifier COUNT_ID;
constant COUNT_CONST;
@@
(
- devm_kzalloc
+ devm_kcalloc
(HANDLE,
- sizeof(TYPE) * (COUNT_ID)
+ COUNT_ID, sizeof(TYPE)
, ...)
|
- devm_kzalloc
+ devm_kcalloc
(HANDLE,
- sizeof(TYPE) * COUNT_ID
+ COUNT_ID, sizeof(TYPE)
, ...)
|
- devm_kzalloc
+ devm_kcalloc
(HANDLE,
- sizeof(TYPE) * (COUNT_CONST)
+ COUNT_CONST, sizeof(TYPE)
, ...)
|
- devm_kzalloc
+ devm_kcalloc
(HANDLE,
- sizeof(TYPE) * COUNT_CONST
+ COUNT_CONST, sizeof(TYPE)
, ...)
|
- devm_kzalloc
+ devm_kcalloc
(HANDLE,
- sizeof(THING) * (COUNT_ID)
+ COUNT_ID, sizeof(THING)
, ...)
|
- devm_kzalloc
+ devm_kcalloc
(HANDLE,
- sizeof(THING) * COUNT_ID
+ COUNT_ID, sizeof(THING)
, ...)
|
- devm_kzalloc
+ devm_kcalloc
(HANDLE,
- sizeof(THING) * (COUNT_CONST)
+ COUNT_CONST, sizeof(THING)
, ...)
|
- devm_kzalloc
+ devm_kcalloc
(HANDLE,
- sizeof(THING) * COUNT_CONST
+ COUNT_CONST, sizeof(THING)
, ...)
)
// 2-factor product, only identifiers.
@@
expression HANDLE;
identifier SIZE, COUNT;
@@
- devm_kzalloc
+ devm_kcalloc
(HANDLE,
- SIZE * COUNT
+ COUNT, SIZE
, ...)
// 3-factor product with 1 sizeof(type) or sizeof(expression), with
// redundant parens removed.
@@
expression HANDLE;
expression THING;
identifier STRIDE, COUNT;
type TYPE;
@@
(
devm_kzalloc(HANDLE,
- sizeof(TYPE) * (COUNT) * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(TYPE) * (COUNT) * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(TYPE) * COUNT * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(TYPE) * COUNT * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(THING) * (COUNT) * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(THING) * (COUNT) * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(THING) * COUNT * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(THING) * COUNT * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
)
// 3-factor product with 2 sizeof(variable), with redundant parens removed.
@@
expression HANDLE;
expression THING1, THING2;
identifier COUNT;
type TYPE1, TYPE2;
@@
(
devm_kzalloc(HANDLE,
- sizeof(TYPE1) * sizeof(TYPE2) * COUNT
+ array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(THING1) * sizeof(THING2) * COUNT
+ array3_size(COUNT, sizeof(THING1), sizeof(THING2))
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(THING1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(THING1), sizeof(THING2))
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(TYPE1) * sizeof(THING2) * COUNT
+ array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
, ...)
|
devm_kzalloc(HANDLE,
- sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
, ...)
)
// 3-factor product, only identifiers, with redundant parens removed.
@@
expression HANDLE;
identifier STRIDE, SIZE, COUNT;
@@
(
devm_kzalloc(HANDLE,
- (COUNT) * STRIDE * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
devm_kzalloc(HANDLE,
- COUNT * (STRIDE) * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
devm_kzalloc(HANDLE,
- COUNT * STRIDE * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
devm_kzalloc(HANDLE,
- (COUNT) * (STRIDE) * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
devm_kzalloc(HANDLE,
- COUNT * (STRIDE) * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
devm_kzalloc(HANDLE,
- (COUNT) * STRIDE * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
devm_kzalloc(HANDLE,
- (COUNT) * (STRIDE) * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
devm_kzalloc(HANDLE,
- COUNT * STRIDE * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
)
// Any remaining multi-factor products, first at least 3-factor products,
// when they're not all constants...
@@
expression HANDLE;
expression E1, E2, E3;
constant C1, C2, C3;
@@
(
devm_kzalloc(HANDLE, C1 * C2 * C3, ...)
|
devm_kzalloc(HANDLE,
- (E1) * E2 * E3
+ array3_size(E1, E2, E3)
, ...)
|
devm_kzalloc(HANDLE,
- (E1) * (E2) * E3
+ array3_size(E1, E2, E3)
, ...)
|
devm_kzalloc(HANDLE,
- (E1) * (E2) * (E3)
+ array3_size(E1, E2, E3)
, ...)
|
devm_kzalloc(HANDLE,
- E1 * E2 * E3
+ array3_size(E1, E2, E3)
, ...)
)
// And then all remaining 2 factors products when they're not all constants,
// keeping sizeof() as the second factor argument.
@@
expression HANDLE;
expression THING, E1, E2;
type TYPE;
constant C1, C2, C3;
@@
(
devm_kzalloc(HANDLE, sizeof(THING) * C2, ...)
|
devm_kzalloc(HANDLE, sizeof(TYPE) * C2, ...)
|
devm_kzalloc(HANDLE, C1 * C2 * C3, ...)
|
devm_kzalloc(HANDLE, C1 * C2, ...)
|
- devm_kzalloc
+ devm_kcalloc
(HANDLE,
- sizeof(TYPE) * (E2)
+ E2, sizeof(TYPE)
, ...)
|
- devm_kzalloc
+ devm_kcalloc
(HANDLE,
- sizeof(TYPE) * E2
+ E2, sizeof(TYPE)
, ...)
|
- devm_kzalloc
+ devm_kcalloc
(HANDLE,
- sizeof(THING) * (E2)
+ E2, sizeof(THING)
, ...)
|
- devm_kzalloc
+ devm_kcalloc
(HANDLE,
- sizeof(THING) * E2
+ E2, sizeof(THING)
, ...)
|
- devm_kzalloc
+ devm_kcalloc
(HANDLE,
- (E1) * E2
+ E1, E2
, ...)
|
- devm_kzalloc
+ devm_kcalloc
(HANDLE,
- (E1) * (E2)
+ E1, E2
, ...)
|
- devm_kzalloc
+ devm_kcalloc
(HANDLE,
- E1 * E2
+ E1, E2
, ...)
)
Signed-off-by: Kees Cook <keescook@chromium.org>
2018-06-13 00:07:58 +03:00
priv - > group . attrs = devm_kcalloc ( & priv - > pdev - > dev ,
num_attrs ,
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
sizeof ( struct attribute * ) ,
GFP_KERNEL ) ;
if ( ! priv - > group . attrs )
return - ENOMEM ;
2018-01-17 21:21:53 +03:00
priv - > group . attrs = priv - > mlxreg_hotplug_attr ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
priv - > groups [ 0 ] = & priv - > group ;
priv - > groups [ 1 ] = NULL ;
return 0 ;
}
2018-01-23 06:55:11 +03:00
static void
mlxreg_hotplug_work_helper ( struct mlxreg_hotplug_priv_data * priv ,
struct mlxreg_core_item * item )
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
{
2018-01-23 06:55:11 +03:00
struct mlxreg_core_data * data ;
2019-02-17 21:15:30 +03:00
unsigned long asserted ;
u32 regval , bit ;
2018-01-23 06:55:11 +03:00
int ret ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
/*
* Validate if item related to received signal type is valid .
* It should never happen , excepted the situation when some
* piece of hardware is broken . In such situation just produce
* error message and return . Caller must continue to handle the
* signals from other devices if any .
*/
if ( unlikely ( ! item ) ) {
2018-01-23 06:55:11 +03:00
dev_err ( priv - > dev , " False signal: at offset:mask 0x%02x:0x%02x. \n " ,
item - > reg , item - > mask ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
return ;
}
2018-01-23 06:55:11 +03:00
/* Mask event. */
ret = regmap_write ( priv - > regmap , item - > reg + MLXREG_HOTPLUG_MASK_OFF ,
0 ) ;
if ( ret )
goto out ;
/* Read status. */
ret = regmap_read ( priv - > regmap , item - > reg , & regval ) ;
if ( ret )
goto out ;
/* Set asserted bits and save last status. */
regval & = item - > mask ;
asserted = item - > cache ^ regval ;
item - > cache = regval ;
2019-02-17 21:15:30 +03:00
for_each_set_bit ( bit , & asserted , 8 ) {
2018-01-23 06:55:11 +03:00
data = item - > data + bit ;
if ( regval & BIT ( bit ) ) {
if ( item - > inversed )
2021-10-02 12:32:32 +03:00
mlxreg_hotplug_device_destroy ( priv , data , item - > kind ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
else
2021-10-02 12:32:32 +03:00
mlxreg_hotplug_device_create ( priv , data , item - > kind ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
} else {
2018-01-23 06:55:11 +03:00
if ( item - > inversed )
2021-10-02 12:32:32 +03:00
mlxreg_hotplug_device_create ( priv , data , item - > kind ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
else
2021-10-02 12:32:32 +03:00
mlxreg_hotplug_device_destroy ( priv , data , item - > kind ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
}
}
/* Acknowledge event. */
2018-01-23 06:55:11 +03:00
ret = regmap_write ( priv - > regmap , item - > reg + MLXREG_HOTPLUG_EVENT_OFF ,
0 ) ;
if ( ret )
goto out ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
/* Unmask event. */
2018-01-23 06:55:11 +03:00
ret = regmap_write ( priv - > regmap , item - > reg + MLXREG_HOTPLUG_MASK_OFF ,
item - > mask ) ;
out :
if ( ret )
dev_err ( priv - > dev , " Failed to complete workqueue. \n " ) ;
}
static void
mlxreg_hotplug_health_work_helper ( struct mlxreg_hotplug_priv_data * priv ,
struct mlxreg_core_item * item )
{
struct mlxreg_core_data * data = item - > data ;
u32 regval ;
2018-02-07 12:12:04 +03:00
int i , ret = 0 ;
2018-01-23 06:55:11 +03:00
for ( i = 0 ; i < item - > count ; i + + , data + + ) {
/* Mask event. */
ret = regmap_write ( priv - > regmap , data - > reg +
MLXREG_HOTPLUG_MASK_OFF , 0 ) ;
if ( ret )
goto out ;
/* Read status. */
ret = regmap_read ( priv - > regmap , data - > reg , & regval ) ;
if ( ret )
goto out ;
regval & = data - > mask ;
2018-07-27 01:40:58 +03:00
if ( item - > cache = = regval )
goto ack_event ;
/*
* ASIC health indication is provided through two bits . Bits
* value 0x2 indicates that ASIC reached the good health , value
* 0x0 indicates ASIC the bad health or dormant state and value
* 0x3 indicates the booting state . During ASIC reset it should
* pass the following states : dormant - > booting - > good .
*/
if ( regval = = MLXREG_HOTPLUG_GOOD_HEALTH_MASK ) {
if ( ! data - > attached ) {
/*
* ASIC is in steady state . Connect associated
* device , if configured .
*/
2021-10-02 12:32:32 +03:00
mlxreg_hotplug_device_create ( priv , data , item - > kind ) ;
2018-01-23 06:55:11 +03:00
data - > attached = true ;
}
} else {
if ( data - > attached ) {
2018-07-27 01:40:58 +03:00
/*
* ASIC health is failed after ASIC has been
* in steady state . Disconnect associated
* device , if it has been connected .
*/
2021-10-02 12:32:32 +03:00
mlxreg_hotplug_device_destroy ( priv , data , item - > kind ) ;
2018-01-23 06:55:11 +03:00
data - > attached = false ;
data - > health_cntr = 0 ;
}
}
2018-07-27 01:40:58 +03:00
item - > cache = regval ;
ack_event :
2018-01-23 06:55:11 +03:00
/* Acknowledge event. */
ret = regmap_write ( priv - > regmap , data - > reg +
MLXREG_HOTPLUG_EVENT_OFF , 0 ) ;
if ( ret )
goto out ;
/* Unmask event. */
ret = regmap_write ( priv - > regmap , data - > reg +
MLXREG_HOTPLUG_MASK_OFF , data - > mask ) ;
if ( ret )
goto out ;
}
out :
if ( ret )
dev_err ( priv - > dev , " Failed to complete workqueue. \n " ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
}
/*
2018-01-23 06:55:11 +03:00
* mlxreg_hotplug_work_handler - performs traversing of device interrupt
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
* registers according to the below hierarchy schema :
*
2018-01-23 06:55:11 +03:00
* Aggregation registers ( status / mask )
* PSU registers : * - - - *
* * - - - - - - - - - - - - - - - - - * | |
* | status / event / mask | - - - - - > | * |
* * - - - - - - - - - - - - - - - - - * | |
* Power registers : | |
* * - - - - - - - - - - - - - - - - - * | |
* | status / event / mask | - - - - - > | * |
* * - - - - - - - - - - - - - - - - - * | |
* FAN registers : | | - - > CPU
* * - - - - - - - - - - - - - - - - - * | |
* | status / event / mask | - - - - - > | * |
* * - - - - - - - - - - - - - - - - - * | |
* ASIC registers : | |
* * - - - - - - - - - - - - - - - - - * | |
* | status / event / mask | - - - - - > | * |
* * - - - - - - - - - - - - - - - - - * | |
* * - - - *
*
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
* In case some system changed are detected : FAN in / out , PSU in / out , power
2018-01-23 06:55:11 +03:00
* cable attached / detached , ASIC health good / bad , relevant device is created
* or destroyed .
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
*/
2018-01-17 21:21:53 +03:00
static void mlxreg_hotplug_work_handler ( struct work_struct * work )
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
{
2018-01-23 06:55:11 +03:00
struct mlxreg_core_hotplug_platform_data * pdata ;
struct mlxreg_hotplug_priv_data * priv ;
struct mlxreg_core_item * item ;
u32 regval , aggr_asserted ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
unsigned long flags ;
2018-01-23 06:55:11 +03:00
int i , ret ;
priv = container_of ( work , struct mlxreg_hotplug_priv_data ,
dwork_irq . work ) ;
pdata = dev_get_platdata ( & priv - > pdev - > dev ) ;
item = pdata - > items ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
/* Mask aggregation event. */
2018-01-23 06:55:11 +03:00
ret = regmap_write ( priv - > regmap , pdata - > cell +
MLXREG_HOTPLUG_AGGR_MASK_OFF , 0 ) ;
if ( ret < 0 )
goto out ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
/* Read aggregation status. */
2018-01-23 06:55:11 +03:00
ret = regmap_read ( priv - > regmap , pdata - > cell , & regval ) ;
if ( ret )
goto out ;
regval & = pdata - > mask ;
aggr_asserted = priv - > aggr_cache ^ regval ;
priv - > aggr_cache = regval ;
2018-05-07 09:48:51 +03:00
/*
* Handler is invoked , but no assertion is detected at top aggregation
* status level . Set aggr_asserted to mask value to allow handler extra
* run over all relevant signals to recover any missed signal .
*/
if ( priv - > not_asserted = = MLXREG_HOTPLUG_NOT_ASSERT ) {
priv - > not_asserted = 0 ;
aggr_asserted = pdata - > mask ;
}
if ( ! aggr_asserted )
goto unmask_event ;
2018-01-23 06:55:11 +03:00
/* Handle topology and health configuration changes. */
for ( i = 0 ; i < pdata - > counter ; i + + , item + + ) {
if ( aggr_asserted & item - > aggr_mask ) {
if ( item - > health )
mlxreg_hotplug_health_work_helper ( priv , item ) ;
else
mlxreg_hotplug_work_helper ( priv , item ) ;
}
}
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
2018-05-07 09:48:51 +03:00
spin_lock_irqsave ( & priv - > lock , flags ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
2018-05-07 09:48:51 +03:00
/*
* It is possible , that some signals have been inserted , while
* interrupt has been masked by mlxreg_hotplug_work_handler . In this
* case such signals will be missed . In order to handle these signals
* delayed work is canceled and work task re - scheduled for immediate
* execution . It allows to handle missed signals , if any . In other case
* work handler just validates that no new signals have been received
* during masking .
*/
cancel_delayed_work ( & priv - > dwork_irq ) ;
schedule_delayed_work ( & priv - > dwork_irq , 0 ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
2018-05-07 09:48:51 +03:00
spin_unlock_irqrestore ( & priv - > lock , flags ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
2018-05-07 09:48:51 +03:00
return ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
2018-05-07 09:48:51 +03:00
unmask_event :
priv - > not_asserted + + ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
/* Unmask aggregation event (no need acknowledge). */
2018-01-23 06:55:11 +03:00
ret = regmap_write ( priv - > regmap , pdata - > cell +
MLXREG_HOTPLUG_AGGR_MASK_OFF , pdata - > mask ) ;
out :
if ( ret )
dev_err ( priv - > dev , " Failed to complete workqueue. \n " ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
}
2018-01-23 06:55:11 +03:00
static int mlxreg_hotplug_set_irq ( struct mlxreg_hotplug_priv_data * priv )
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
{
2018-01-23 06:55:11 +03:00
struct mlxreg_core_hotplug_platform_data * pdata ;
struct mlxreg_core_item * item ;
2018-12-13 02:59:15 +03:00
struct mlxreg_core_data * data ;
u32 regval ;
int i , j , ret ;
2018-01-23 06:55:11 +03:00
pdata = dev_get_platdata ( & priv - > pdev - > dev ) ;
item = pdata - > items ;
for ( i = 0 ; i < pdata - > counter ; i + + , item + + ) {
/* Clear group presense event. */
ret = regmap_write ( priv - > regmap , item - > reg +
MLXREG_HOTPLUG_EVENT_OFF , 0 ) ;
if ( ret )
goto out ;
2018-12-13 02:59:15 +03:00
/*
* Verify if hardware configuration requires to disable
* interrupt capability for some of components .
*/
data = item - > data ;
for ( j = 0 ; j < item - > count ; j + + , data + + ) {
/* Verify if the attribute has capability register. */
if ( data - > capability ) {
/* Read capability register. */
ret = regmap_read ( priv - > regmap ,
data - > capability , & regval ) ;
if ( ret )
goto out ;
if ( ! ( regval & data - > bit ) )
item - > mask & = ~ BIT ( j ) ;
}
}
2018-01-23 06:55:11 +03:00
/* Set group initial status as mask and unmask group event. */
if ( item - > inversed ) {
item - > cache = item - > mask ;
ret = regmap_write ( priv - > regmap , item - > reg +
MLXREG_HOTPLUG_MASK_OFF ,
item - > mask ) ;
if ( ret )
goto out ;
}
}
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
/* Keep aggregation initial status as zero and unmask events. */
2018-01-23 06:55:11 +03:00
ret = regmap_write ( priv - > regmap , pdata - > cell +
MLXREG_HOTPLUG_AGGR_MASK_OFF , pdata - > mask ) ;
if ( ret )
goto out ;
/* Keep low aggregation initial status as zero and unmask events. */
if ( pdata - > cell_low ) {
ret = regmap_write ( priv - > regmap , pdata - > cell_low +
MLXREG_HOTPLUG_AGGR_MASK_OFF ,
pdata - > mask_low ) ;
if ( ret )
goto out ;
}
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
/* Invoke work handler for initializing hot plug devices setting. */
2018-01-23 06:55:11 +03:00
mlxreg_hotplug_work_handler ( & priv - > dwork_irq . work ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
2018-01-23 06:55:11 +03:00
out :
if ( ret )
dev_err ( priv - > dev , " Failed to set interrupts. \n " ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
enable_irq ( priv - > irq ) ;
2018-01-23 06:55:11 +03:00
return ret ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
}
2018-01-17 21:21:53 +03:00
static void mlxreg_hotplug_unset_irq ( struct mlxreg_hotplug_priv_data * priv )
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
{
2018-01-23 06:55:11 +03:00
struct mlxreg_core_hotplug_platform_data * pdata ;
struct mlxreg_core_item * item ;
struct mlxreg_core_data * data ;
int count , i , j ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
2018-01-23 06:55:11 +03:00
pdata = dev_get_platdata ( & priv - > pdev - > dev ) ;
item = pdata - > items ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
disable_irq ( priv - > irq ) ;
2018-01-23 06:55:11 +03:00
cancel_delayed_work_sync ( & priv - > dwork_irq ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
2018-01-23 06:55:11 +03:00
/* Mask low aggregation event, if defined. */
if ( pdata - > cell_low )
regmap_write ( priv - > regmap , pdata - > cell_low +
MLXREG_HOTPLUG_AGGR_MASK_OFF , 0 ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
2018-01-23 06:55:11 +03:00
/* Mask aggregation event. */
regmap_write ( priv - > regmap , pdata - > cell + MLXREG_HOTPLUG_AGGR_MASK_OFF ,
0 ) ;
/* Clear topology configurations. */
for ( i = 0 ; i < pdata - > counter ; i + + , item + + ) {
data = item - > data ;
/* Mask group presense event. */
regmap_write ( priv - > regmap , data - > reg + MLXREG_HOTPLUG_MASK_OFF ,
0 ) ;
/* Clear group presense event. */
regmap_write ( priv - > regmap , data - > reg +
MLXREG_HOTPLUG_EVENT_OFF , 0 ) ;
/* Remove all the attached devices in group. */
count = item - > count ;
for ( j = 0 ; j < count ; j + + , data + + )
2021-10-02 12:32:32 +03:00
mlxreg_hotplug_device_destroy ( priv , data , item - > kind ) ;
2018-01-23 06:55:11 +03:00
}
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
}
2018-01-17 21:21:53 +03:00
static irqreturn_t mlxreg_hotplug_irq_handler ( int irq , void * dev )
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
{
2018-01-23 06:55:11 +03:00
struct mlxreg_hotplug_priv_data * priv ;
priv = ( struct mlxreg_hotplug_priv_data * ) dev ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
/* Schedule work task for immediate execution.*/
2018-01-23 06:55:11 +03:00
schedule_delayed_work ( & priv - > dwork_irq , 0 ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
return IRQ_HANDLED ;
}
2018-01-17 21:21:53 +03:00
static int mlxreg_hotplug_probe ( struct platform_device * pdev )
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
{
2018-01-23 06:55:11 +03:00
struct mlxreg_core_hotplug_platform_data * pdata ;
2018-01-17 21:21:53 +03:00
struct mlxreg_hotplug_priv_data * priv ;
2018-02-14 01:09:34 +03:00
struct i2c_adapter * deferred_adap ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
int err ;
pdata = dev_get_platdata ( & pdev - > dev ) ;
if ( ! pdata ) {
dev_err ( & pdev - > dev , " Failed to get platform data. \n " ) ;
return - EINVAL ;
}
2018-02-14 01:09:34 +03:00
/* Defer probing if the necessary adapter is not configured yet. */
deferred_adap = i2c_get_adapter ( pdata - > deferred_nr ) ;
if ( ! deferred_adap )
return - EPROBE_DEFER ;
i2c_put_adapter ( deferred_adap ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
priv = devm_kzalloc ( & pdev - > dev , sizeof ( * priv ) , GFP_KERNEL ) ;
if ( ! priv )
return - ENOMEM ;
2018-01-23 06:55:11 +03:00
if ( pdata - > irq ) {
priv - > irq = pdata - > irq ;
} else {
priv - > irq = platform_get_irq ( pdev , 0 ) ;
2019-07-30 21:15:53 +03:00
if ( priv - > irq < 0 )
2018-01-23 06:55:11 +03:00
return priv - > irq ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
}
2018-01-23 06:55:11 +03:00
priv - > regmap = pdata - > regmap ;
priv - > dev = pdev - > dev . parent ;
priv - > pdev = pdev ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
err = devm_request_irq ( & pdev - > dev , priv - > irq ,
2018-01-23 06:55:11 +03:00
mlxreg_hotplug_irq_handler , IRQF_TRIGGER_FALLING
2021-06-03 20:28:27 +03:00
| IRQF_SHARED , " mlxreg-hotplug " , priv ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
if ( err ) {
dev_err ( & pdev - > dev , " Failed to request irq: %d \n " , err ) ;
return err ;
}
2021-06-03 20:28:27 +03:00
disable_irq ( priv - > irq ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
spin_lock_init ( & priv - > lock ) ;
2018-01-23 06:55:11 +03:00
INIT_DELAYED_WORK ( & priv - > dwork_irq , mlxreg_hotplug_work_handler ) ;
dev_set_drvdata ( & pdev - > dev , priv ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
2018-01-17 21:21:53 +03:00
err = mlxreg_hotplug_attr_init ( priv ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
if ( err ) {
2018-01-23 06:55:11 +03:00
dev_err ( & pdev - > dev , " Failed to allocate attributes: %d \n " ,
err ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
return err ;
}
priv - > hwmon = devm_hwmon_device_register_with_groups ( & pdev - > dev ,
2018-01-17 21:21:53 +03:00
" mlxreg_hotplug " , priv , priv - > groups ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
if ( IS_ERR ( priv - > hwmon ) ) {
dev_err ( & pdev - > dev , " Failed to register hwmon device %ld \n " ,
PTR_ERR ( priv - > hwmon ) ) ;
return PTR_ERR ( priv - > hwmon ) ;
}
2018-07-27 01:40:59 +03:00
/* Perform initial interrupts setup. */
mlxreg_hotplug_set_irq ( priv ) ;
priv - > after_probe = true ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
return 0 ;
}
2018-01-17 21:21:53 +03:00
static int mlxreg_hotplug_remove ( struct platform_device * pdev )
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
{
2018-01-23 06:55:11 +03:00
struct mlxreg_hotplug_priv_data * priv = dev_get_drvdata ( & pdev - > dev ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
/* Clean interrupts setup. */
2018-01-17 21:21:53 +03:00
mlxreg_hotplug_unset_irq ( priv ) ;
2019-05-23 19:41:52 +03:00
devm_free_irq ( & pdev - > dev , priv - > irq , priv ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
return 0 ;
}
2018-01-17 21:21:53 +03:00
static struct platform_driver mlxreg_hotplug_driver = {
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
. driver = {
2018-01-17 21:21:53 +03:00
. name = " mlxreg-hotplug " ,
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
} ,
2018-01-17 21:21:53 +03:00
. probe = mlxreg_hotplug_probe ,
. remove = mlxreg_hotplug_remove ,
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
} ;
2018-01-17 21:21:53 +03:00
module_platform_driver ( mlxreg_hotplug_driver ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
MODULE_AUTHOR ( " Vadim Pasternak <vadimp@mellanox.com> " ) ;
2018-01-17 21:21:53 +03:00
MODULE_DESCRIPTION ( " Mellanox regmap hotplug platform driver " ) ;
platform/x86: Introduce support for Mellanox hotplug driver
Enable system support for the Mellanox Technologies hotplug platform
driver, which provides support for the next Mellanox basic systems:
"msx6710", "msx6720", "msb7700", "msn2700", "msx1410", "msn2410",
"msb7800", "msn2740", "msn2100" and also various number of derivative
systems from the above basic types.
This driver handles hot-plug events for the power suppliers, power
cables and fans for the above systems.
The Kconfig currently controlling compilation of this code is:
driver/platform/x86:config MLX_CPLD_PLATFORM
tristate "Mellanox platform hotplug driver support"
Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
2016-10-20 19:28:01 +03:00
MODULE_LICENSE ( " Dual BSD/GPL " ) ;
2018-01-17 21:21:53 +03:00
MODULE_ALIAS ( " platform:mlxreg-hotplug " ) ;