|
@@ -25,6 +25,7 @@
|
|
#include <linux/err.h>
|
|
#include <linux/err.h>
|
|
#include <linux/module.h>
|
|
#include <linux/module.h>
|
|
#include <linux/platform_device.h>
|
|
#include <linux/platform_device.h>
|
|
|
|
+#include <linux/mfd/max77620.h>
|
|
#include <linux/mfd/max77686.h>
|
|
#include <linux/mfd/max77686.h>
|
|
#include <linux/mfd/max77686-private.h>
|
|
#include <linux/mfd/max77686-private.h>
|
|
#include <linux/clk-provider.h>
|
|
#include <linux/clk-provider.h>
|
|
@@ -35,12 +36,14 @@
|
|
|
|
|
|
#include <dt-bindings/clock/maxim,max77686.h>
|
|
#include <dt-bindings/clock/maxim,max77686.h>
|
|
#include <dt-bindings/clock/maxim,max77802.h>
|
|
#include <dt-bindings/clock/maxim,max77802.h>
|
|
|
|
+#include <dt-bindings/clock/maxim,max77620.h>
|
|
|
|
|
|
#define MAX77802_CLOCK_LOW_JITTER_SHIFT 0x3
|
|
#define MAX77802_CLOCK_LOW_JITTER_SHIFT 0x3
|
|
|
|
|
|
enum max77686_chip_name {
|
|
enum max77686_chip_name {
|
|
CHIP_MAX77686,
|
|
CHIP_MAX77686,
|
|
CHIP_MAX77802,
|
|
CHIP_MAX77802,
|
|
|
|
+ CHIP_MAX77620,
|
|
};
|
|
};
|
|
|
|
|
|
struct max77686_hw_clk_info {
|
|
struct max77686_hw_clk_info {
|
|
@@ -97,6 +100,15 @@ max77686_hw_clk_info max77802_hw_clks_info[MAX77802_CLKS_NUM] = {
|
|
},
|
|
},
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+static const struct
|
|
|
|
+max77686_hw_clk_info max77620_hw_clks_info[MAX77620_CLKS_NUM] = {
|
|
|
|
+ [MAX77620_CLK_32K_OUT0] = {
|
|
|
|
+ .name = "32khz_out0",
|
|
|
|
+ .clk_reg = MAX77620_REG_CNFG1_32K,
|
|
|
|
+ .clk_enable_mask = MAX77620_CNFG1_32K_OUT0_EN,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
static struct max77686_clk_init_data *to_max77686_clk_init_data(
|
|
static struct max77686_clk_init_data *to_max77686_clk_init_data(
|
|
struct clk_hw *hw)
|
|
struct clk_hw *hw)
|
|
{
|
|
{
|
|
@@ -181,6 +193,11 @@ static int max77686_clk_probe(struct platform_device *pdev)
|
|
hw_clks = max77802_hw_clks_info;
|
|
hw_clks = max77802_hw_clks_info;
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
+ case CHIP_MAX77620:
|
|
|
|
+ num_clks = MAX77620_CLKS_NUM;
|
|
|
|
+ hw_clks = max77620_hw_clks_info;
|
|
|
|
+ break;
|
|
|
|
+
|
|
default:
|
|
default:
|
|
dev_err(dev, "Unknown Chip ID\n");
|
|
dev_err(dev, "Unknown Chip ID\n");
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
@@ -284,6 +301,7 @@ static int max77686_clk_remove(struct platform_device *pdev)
|
|
static const struct platform_device_id max77686_clk_id[] = {
|
|
static const struct platform_device_id max77686_clk_id[] = {
|
|
{ "max77686-clk", .driver_data = CHIP_MAX77686, },
|
|
{ "max77686-clk", .driver_data = CHIP_MAX77686, },
|
|
{ "max77802-clk", .driver_data = CHIP_MAX77802, },
|
|
{ "max77802-clk", .driver_data = CHIP_MAX77802, },
|
|
|
|
+ { "max77620-clock", .driver_data = CHIP_MAX77620, },
|
|
{},
|
|
{},
|
|
};
|
|
};
|
|
MODULE_DEVICE_TABLE(platform, max77686_clk_id);
|
|
MODULE_DEVICE_TABLE(platform, max77686_clk_id);
|