016e0d3cb7
This patch adds support for Exynos3250 SoC to Exynos2USB PHY driver. Although Exynos3250 has only one device phy interface, the register layout and all operations that are required to get it enabled are almost same as on Exynos4x12. The only different is one more register (REFCLKSEL) which need to be set and lack of MODE SWITCH register. Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Reviewed-by: Tomasz Figa <t.figa@samsung.com> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
71 lines
1.8 KiB
C
71 lines
1.8 KiB
C
/*
|
|
* Samsung SoC USB 1.1/2.0 PHY driver
|
|
*
|
|
* Copyright (C) 2013 Samsung Electronics Co., Ltd.
|
|
* Author: Kamil Debski <k.debski@samsung.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
|
|
#ifndef _PHY_EXYNOS_USB2_H
|
|
#define _PHY_EXYNOS_USB2_H
|
|
|
|
#include <linux/clk.h>
|
|
#include <linux/phy/phy.h>
|
|
#include <linux/device.h>
|
|
#include <linux/regmap.h>
|
|
#include <linux/spinlock.h>
|
|
|
|
#define KHZ 1000
|
|
#define MHZ (KHZ * KHZ)
|
|
|
|
struct samsung_usb2_phy_driver;
|
|
struct samsung_usb2_phy_instance;
|
|
struct samsung_usb2_phy_config;
|
|
|
|
struct samsung_usb2_phy_instance {
|
|
const struct samsung_usb2_common_phy *cfg;
|
|
struct phy *phy;
|
|
struct samsung_usb2_phy_driver *drv;
|
|
int int_cnt;
|
|
int ext_cnt;
|
|
};
|
|
|
|
struct samsung_usb2_phy_driver {
|
|
const struct samsung_usb2_phy_config *cfg;
|
|
struct clk *clk;
|
|
struct clk *ref_clk;
|
|
unsigned long ref_rate;
|
|
u32 ref_reg_val;
|
|
struct device *dev;
|
|
void __iomem *reg_phy;
|
|
struct regmap *reg_pmu;
|
|
struct regmap *reg_sys;
|
|
spinlock_t lock;
|
|
struct samsung_usb2_phy_instance instances[0];
|
|
};
|
|
|
|
struct samsung_usb2_common_phy {
|
|
int (*power_on)(struct samsung_usb2_phy_instance *);
|
|
int (*power_off)(struct samsung_usb2_phy_instance *);
|
|
unsigned int id;
|
|
char *label;
|
|
};
|
|
|
|
|
|
struct samsung_usb2_phy_config {
|
|
const struct samsung_usb2_common_phy *phys;
|
|
int (*rate_to_clk)(unsigned long, u32 *);
|
|
unsigned int num_phys;
|
|
bool has_mode_switch;
|
|
bool has_refclk_sel;
|
|
};
|
|
|
|
extern const struct samsung_usb2_phy_config exynos3250_usb2_phy_config;
|
|
extern const struct samsung_usb2_phy_config exynos4210_usb2_phy_config;
|
|
extern const struct samsung_usb2_phy_config exynos4x12_usb2_phy_config;
|
|
extern const struct samsung_usb2_phy_config exynos5250_usb2_phy_config;
|
|
#endif
|