// SPDX-License-Identifier: GPL-2.0-only
/*
* Driver for the Microchip PD692X0 PoE PSE Controller driver (I2C bus)
*
* Copyright (c) 2023 Bootlin, Kory Maincent <kory.maincent@bootlin.com>
*/
#include <linux/delay.h>
#include <linux/firmware.h>
#include <linux/i2c.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pse-pd/pse.h>
#define PD692X0_PSE_NAME "pd692x0_pse"
#define PD692X0_MAX_PIS 48
#define PD692X0_MAX_MANAGERS 12
#define PD692X0_MAX_MANAGER_PORTS 8
#define PD692X0_MAX_HW_PORTS (PD692X0_MAX_MANAGERS * PD692X0_MAX_MANAGER_PORTS)
#define PD69200_BT_PROD_VER 24
#define PD69210_BT_PROD_VER 26
#define PD69220_BT_PROD_VER 29
#define PD692X0_FW_MAJ_VER 3
#define PD692X0_FW_MIN_VER 5
#define PD692X0_FW_PATCH_VER 5
enum pd692x0_fw_state {
PD692X0_FW_UNKNOWN,
PD692X0_FW_OK,
PD692X0_FW_BROKEN,
PD692X0_FW_NEED_UPDATE,
PD692X0_FW_PREPARE,
PD692X0_FW_WRITE,
PD692X0_FW_COMPLETE,
};
struct pd692x0_msg {
u8 key;
u8 echo;
u8 sub[3];
u8 data[8];
__be16 chksum;
} __packed;
struct pd692x0_msg_ver {
u8 prod;