mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-26 15:45:14 +08:00
* two driver fixes for issues introduced this cycle
* one trivial driver improvement regarding ACPI * more DTS conversion and additions * documentation updates * subsystem-wide move from strlcpy to strscpy -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEOZGx6rniZ1Gk92RdFA3kzBSgKbYFAmL3xVcACgkQFA3kzBSg KbaMLg//TjS/8kXuAG7IC/6oyc75XMoWd7KVAPVBgMLe4AAMf5+zHMrO0Nje4uDL WnDPqJrIyLt85y6ffAlvGktWupc/dlFEToHGCpI89ApPZJL78lxbT3MfMK42QqC3 sc1eOStTVyU/3NR2KUuvaG3lCYBRvsXob2TxwagroZApxhK2GOEmwHfNFtZXhp3J pwId+QLp3lSE3MKq4e5dcT8t0moxsI9jxQBBqecjSem/9BP44UTvJjfp7mayQocR JmhNkaHIe/dnf8+I4E110ai8hyvk14zoseM6C89k88iN3wIoaPPJRJ3O6ZoJ5ZhP qJx2uczpDSFY+ihGypxJZWDwZj5Z6+ywC5T1qDXHsE96+WNhADXoNRCNXwb8jIOe kFRWvbhzKvf3w4Dp9garKE4CxC0NpPPwnGzB7j+dQz4RJaf/4djsDRhFkQiqn7Tr MTsChqO3mHqJVgNLmCbQEhzV59pei72AdNLq/QZM57xrH+sGIWwW9JB9bCOu4w77 RbItAR9072XVzzvbLz3UZsqYyuBf5NPF38H3MFjvvddtK9xpUa8eFajLuGlP5Or9 VGbXBXQ8pXNOoeX8JhNY/AXbghLGux3mOI2soLxOKkPS9XhKI/ifV6EgSQTRi6o4 0GHOdbmudv6v9Piy1F8x7UeyJyNmNCYn0CdBHMfNVE7hvId0WZI= =CHez -----END PGP SIGNATURE----- Merge tag 'i2c-for-5.20-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux Pull more i2c updates from Wolfram Sang: - two driver fixes for issues introduced this cycle - one trivial driver improvement regarding ACPI - more DTS conversion and additions - documentation updates - subsystem-wide move from strlcpy to strscpy * tag 'i2c-for-5.20-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: docs: i2c: i2c-sysfs: fix hyperlinks docs: i2c: i2c-sysfs: improve wording docs: i2c: instantiating-devices: add syntax coloring to dts and C blocks docs: i2c: smbus-protocol: improve DataLow/DataHigh definition docs: i2c: i2c-protocol: remove unused legend items docs: i2c: i2c-protocol,smbus-protocol: remove nonsense words docs: i2c: i2c-protocol: update introductory paragraph i2c: move core from strlcpy to strscpy i2c: move drivers from strlcpy to strscpy i2c: kempld: Support ACPI I2C device declaration i2c: mediatek: add i2c compatible for MT8188 dt-bindings: i2c: update bindings for mt8188 soc i2c: microchip-corei2c: fix erroneous late ack send dt-bindings: i2c: qcom,i2c-cci: convert to dtschema i2c: qcom-geni: Fix GPI DMA buffer sync-back
This commit is contained in:
commit
0473436195
@ -27,6 +27,7 @@ properties:
|
||||
- const: mediatek,mt8173-i2c
|
||||
- const: mediatek,mt8183-i2c
|
||||
- const: mediatek,mt8186-i2c
|
||||
- const: mediatek,mt8188-i2c
|
||||
- const: mediatek,mt8192-i2c
|
||||
- items:
|
||||
- enum:
|
||||
|
@ -1,96 +0,0 @@
|
||||
Qualcomm Camera Control Interface (CCI) I2C controller
|
||||
|
||||
PROPERTIES:
|
||||
|
||||
- compatible:
|
||||
Usage: required
|
||||
Value type: <string>
|
||||
Definition: must be one of:
|
||||
"qcom,msm8916-cci"
|
||||
"qcom,msm8974-cci"
|
||||
"qcom,msm8996-cci"
|
||||
"qcom,sdm845-cci"
|
||||
"qcom,sm8250-cci"
|
||||
"qcom,sm8450-cci"
|
||||
|
||||
- reg
|
||||
Usage: required
|
||||
Value type: <prop-encoded-array>
|
||||
Definition: base address CCI I2C controller and length of memory
|
||||
mapped region.
|
||||
|
||||
- interrupts:
|
||||
Usage: required
|
||||
Value type: <prop-encoded-array>
|
||||
Definition: specifies the CCI I2C interrupt. The format of the
|
||||
specifier is defined by the binding document describing
|
||||
the node's interrupt parent.
|
||||
|
||||
- clocks:
|
||||
Usage: required
|
||||
Value type: <prop-encoded-array>
|
||||
Definition: a list of phandle, should contain an entry for each
|
||||
entries in clock-names.
|
||||
|
||||
- clock-names
|
||||
Usage: required
|
||||
Value type: <string>
|
||||
Definition: a list of clock names, must include "cci" clock.
|
||||
|
||||
- power-domains
|
||||
Usage: required for "qcom,msm8996-cci"
|
||||
Value type: <prop-encoded-array>
|
||||
Definition:
|
||||
|
||||
SUBNODES:
|
||||
|
||||
The CCI provides I2C masters for one (msm8916) or two i2c busses (msm8974,
|
||||
msm8996, sdm845, sm8250 and sm8450), described as subdevices named "i2c-bus@0"
|
||||
and "i2c-bus@1".
|
||||
|
||||
PROPERTIES:
|
||||
|
||||
- reg:
|
||||
Usage: required
|
||||
Value type: <u32>
|
||||
Definition: Index of the CCI bus/master
|
||||
|
||||
- clock-frequency:
|
||||
Usage: optional
|
||||
Value type: <u32>
|
||||
Definition: Desired I2C bus clock frequency in Hz, defaults to 100
|
||||
kHz if omitted.
|
||||
|
||||
Example:
|
||||
|
||||
cci@a0c000 {
|
||||
compatible = "qcom,msm8996-cci";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0xa0c000 0x1000>;
|
||||
interrupts = <GIC_SPI 295 IRQ_TYPE_EDGE_RISING>;
|
||||
clocks = <&mmcc MMSS_MMAGIC_AHB_CLK>,
|
||||
<&mmcc CAMSS_TOP_AHB_CLK>,
|
||||
<&mmcc CAMSS_CCI_AHB_CLK>,
|
||||
<&mmcc CAMSS_CCI_CLK>,
|
||||
<&mmcc CAMSS_AHB_CLK>;
|
||||
clock-names = "mmss_mmagic_ahb",
|
||||
"camss_top_ahb",
|
||||
"cci_ahb",
|
||||
"cci",
|
||||
"camss_ahb";
|
||||
|
||||
i2c-bus@0 {
|
||||
reg = <0>;
|
||||
clock-frequency = <400000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
i2c-bus@1 {
|
||||
reg = <1>;
|
||||
clock-frequency = <400000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
};
|
242
Documentation/devicetree/bindings/i2c/qcom,i2c-cci.yaml
Normal file
242
Documentation/devicetree/bindings/i2c/qcom,i2c-cci.yaml
Normal file
@ -0,0 +1,242 @@
|
||||
# SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/i2c/qcom,i2c-cci.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Qualcomm Camera Control Interface (CCI) I2C controller
|
||||
|
||||
maintainers:
|
||||
- Loic Poulain <loic.poulain@linaro.org>
|
||||
- Robert Foss <robert.foss@linaro.org>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- qcom,msm8916-cci
|
||||
- qcom,msm8974-cci
|
||||
- qcom,msm8996-cci
|
||||
- qcom,sdm845-cci
|
||||
- qcom,sm8250-cci
|
||||
- qcom,sm8450-cci
|
||||
|
||||
"#address-cells":
|
||||
const: 1
|
||||
|
||||
"#size-cells":
|
||||
const: 0
|
||||
|
||||
clocks:
|
||||
minItems: 4
|
||||
maxItems: 6
|
||||
|
||||
clock-names:
|
||||
minItems: 4
|
||||
maxItems: 6
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
power-domains:
|
||||
maxItems: 1
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
patternProperties:
|
||||
"^i2c-bus@[01]$":
|
||||
$ref: /schemas/i2c/i2c-controller.yaml#
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
clock-frequency:
|
||||
default: 100000
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- clock-names
|
||||
- clocks
|
||||
- interrupts
|
||||
- reg
|
||||
|
||||
allOf:
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- qcom,msm8996-cci
|
||||
then:
|
||||
required:
|
||||
- power-domains
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- qcom,msm8916-cci
|
||||
then:
|
||||
properties:
|
||||
i2c-bus@1: false
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- qcom,msm8916-cci
|
||||
- qcom,msm8996-cci
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
maxItems: 4
|
||||
clock-names:
|
||||
items:
|
||||
- const: camss_top_ahb
|
||||
- const: cci_ahb
|
||||
- const: cci
|
||||
- const: camss_ahb
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- qcom,sdm845-cci
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
minItems: 6
|
||||
clock-names:
|
||||
items:
|
||||
- const: camnoc_axi
|
||||
- const: soc_ahb
|
||||
- const: slow_ahb_src
|
||||
- const: cpas_ahb
|
||||
- const: cci
|
||||
- const: cci_src
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- qcom,sm8250-cci
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
minItems: 5
|
||||
maxItems: 5
|
||||
clock-names:
|
||||
items:
|
||||
- const: camnoc_axi
|
||||
- const: slow_ahb_src
|
||||
- const: cpas_ahb
|
||||
- const: cci
|
||||
- const: cci_src
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/clock/qcom,camcc-sdm845.h>
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
|
||||
cci@ac4a000 {
|
||||
reg = <0x0ac4a000 0x4000>;
|
||||
compatible = "qcom,sdm845-cci";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
interrupts = <GIC_SPI 460 IRQ_TYPE_EDGE_RISING>;
|
||||
power-domains = <&clock_camcc TITAN_TOP_GDSC>;
|
||||
|
||||
clocks = <&clock_camcc CAM_CC_CAMNOC_AXI_CLK>,
|
||||
<&clock_camcc CAM_CC_SOC_AHB_CLK>,
|
||||
<&clock_camcc CAM_CC_SLOW_AHB_CLK_SRC>,
|
||||
<&clock_camcc CAM_CC_CPAS_AHB_CLK>,
|
||||
<&clock_camcc CAM_CC_CCI_CLK>,
|
||||
<&clock_camcc CAM_CC_CCI_CLK_SRC>;
|
||||
clock-names = "camnoc_axi",
|
||||
"soc_ahb",
|
||||
"slow_ahb_src",
|
||||
"cpas_ahb",
|
||||
"cci",
|
||||
"cci_src";
|
||||
|
||||
assigned-clocks = <&clock_camcc CAM_CC_CAMNOC_AXI_CLK>,
|
||||
<&clock_camcc CAM_CC_CCI_CLK>;
|
||||
assigned-clock-rates = <80000000>,
|
||||
<37500000>;
|
||||
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&cci0_default &cci1_default>;
|
||||
pinctrl-1 = <&cci0_sleep &cci1_sleep>;
|
||||
|
||||
i2c-bus@0 {
|
||||
reg = <0>;
|
||||
clock-frequency = <1000000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
camera@10 {
|
||||
compatible = "ovti,ov8856";
|
||||
reg = <0x10>;
|
||||
|
||||
reset-gpios = <&tlmm 9 GPIO_ACTIVE_LOW>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&cam0_default>;
|
||||
|
||||
clocks = <&clock_camcc CAM_CC_MCLK0_CLK>;
|
||||
clock-names = "xvclk";
|
||||
clock-frequency = <19200000>;
|
||||
|
||||
dovdd-supply = <&vreg_lvs1a_1p8>;
|
||||
avdd-supply = <&cam0_avdd_2v8>;
|
||||
dvdd-supply = <&cam0_dvdd_1v2>;
|
||||
|
||||
port {
|
||||
ov8856_ep: endpoint {
|
||||
link-frequencies = /bits/ 64 <360000000 180000000>;
|
||||
data-lanes = <1 2 3 4>;
|
||||
remote-endpoint = <&csiphy0_ep>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
cci_i2c1: i2c-bus@1 {
|
||||
reg = <1>;
|
||||
clock-frequency = <1000000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
camera@60 {
|
||||
compatible = "ovti,ov7251";
|
||||
reg = <0x60>;
|
||||
|
||||
enable-gpios = <&tlmm 21 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&cam3_default>;
|
||||
|
||||
clocks = <&clock_camcc CAM_CC_MCLK3_CLK>;
|
||||
clock-names = "xclk";
|
||||
clock-frequency = <24000000>;
|
||||
|
||||
vdddo-supply = <&vreg_lvs1a_1p8>;
|
||||
vdda-supply = <&cam3_avdd_2v8>;
|
||||
|
||||
port {
|
||||
ov7251_ep: endpoint {
|
||||
data-lanes = <0 1>;
|
||||
remote-endpoint = <&csiphy3_ep>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
@ -2,7 +2,8 @@
|
||||
The I2C Protocol
|
||||
================
|
||||
|
||||
This document describes the I2C protocol. Or will, when it is finished :-)
|
||||
This document is an overview of the basic I2C transactions and the kernel
|
||||
APIs to perform them.
|
||||
|
||||
Key to symbols
|
||||
==============
|
||||
@ -12,13 +13,9 @@ S Start condition
|
||||
P Stop condition
|
||||
Rd/Wr (1 bit) Read/Write bit. Rd equals 1, Wr equals 0.
|
||||
A, NA (1 bit) Acknowledge (ACK) and Not Acknowledge (NACK) bit
|
||||
Addr (7 bits) I2C 7 bit address. Note that this can be expanded as usual to
|
||||
Addr (7 bits) I2C 7 bit address. Note that this can be expanded to
|
||||
get a 10 bit I2C address.
|
||||
Comm (8 bits) Command byte, a data byte which often selects a register on
|
||||
the device.
|
||||
Data (8 bits) A plain data byte. Sometimes, I write DataLow, DataHigh
|
||||
for 16 bit data.
|
||||
Count (8 bits) A data byte containing the length of a block operation.
|
||||
Data (8 bits) A plain data byte.
|
||||
|
||||
[..] Data sent by I2C device, as opposed to data sent by the
|
||||
host adapter.
|
||||
|
@ -51,11 +51,10 @@ Google Pixel 3 phone for example::
|
||||
``i2c-2`` is an I2C bus whose number is 2, and ``2-0049`` is an I2C device
|
||||
on bus 2 address 0x49 bound with a kernel driver.
|
||||
|
||||
Terminologies
|
||||
=============
|
||||
Terminology
|
||||
===========
|
||||
|
||||
First, let us define a couple of terminologies to avoid confusions in the later
|
||||
sections.
|
||||
First, let us define some terms to avoid confusion in later sections.
|
||||
|
||||
(Physical) I2C Bus Controller
|
||||
-----------------------------
|
||||
@ -100,9 +99,7 @@ Caveat
|
||||
This may be a confusing part for people who only know about the physical I2C
|
||||
design of a board. It is actually possible to rename the I2C bus physical number
|
||||
to a different number in logical I2C bus level in Device Tree Source (DTS) under
|
||||
section ``aliases``. See
|
||||
`arch/arm/boot/dts/nuvoton-npcm730-gsj.dts
|
||||
<../../arch/arm/boot/dts/nuvoton-npcm730-gsj.dts>`_
|
||||
section ``aliases``. See ``arch/arm/boot/dts/nuvoton-npcm730-gsj.dts``
|
||||
for an example of DTS file.
|
||||
|
||||
Best Practice: **(To kernel software developers)** It is better to keep the I2C
|
||||
@ -117,7 +114,7 @@ Walk through Logical I2C Bus
|
||||
|
||||
For the following content, we will use a more complex I2C topology as an
|
||||
example. Here is a brief graph for the I2C topology. If you do not understand
|
||||
this graph at the first glance, do not be afraid to continue reading this doc
|
||||
this graph at first glance, do not be afraid to continue reading this doc
|
||||
and review it when you finish reading.
|
||||
|
||||
::
|
||||
@ -290,8 +287,7 @@ MUX channel 0, and all the way to ``i2c-19`` for the MUX channel 3.
|
||||
The kernel software developer is able to pin the fanout MUX channels to a static
|
||||
logical I2C bus number in the DTS. This doc will not go through the details on
|
||||
how to implement this in DTS, but we can see an example in:
|
||||
`arch/arm/boot/dts/aspeed-bmc-facebook-wedge400.dts
|
||||
<../../arch/arm/boot/dts/aspeed-bmc-facebook-wedge400.dts>`_
|
||||
``arch/arm/boot/dts/aspeed-bmc-facebook-wedge400.dts``
|
||||
|
||||
In the above example, there is an 8-channel I2C MUX at address 0x70 on physical
|
||||
I2C bus 2. The channel 2 of the MUX is defined as ``imux18`` in DTS,
|
||||
@ -383,13 +379,9 @@ Sysfs for the I2C sensor device::
|
||||
|
||||
For more info on the Hwmon Sysfs, refer to the doc:
|
||||
|
||||
`Naming and data format standards for sysfs files
|
||||
<../hwmon/sysfs-interface.rst>`_
|
||||
../hwmon/sysfs-interface.rst
|
||||
|
||||
Instantiate I2C Devices in I2C Sysfs
|
||||
------------------------------------
|
||||
|
||||
Refer to the doc:
|
||||
|
||||
`How to instantiate I2C devices, Method 4: Instantiate from user-space
|
||||
<instantiating-devices.rst#method-4-instantiate-from-user-space>`_
|
||||
Refer to section "Method 4: Instantiate from user-space" of instantiating-devices.rst
|
||||
|
@ -31,7 +31,9 @@ Declare the I2C devices via devicetree
|
||||
On platforms using devicetree, the declaration of I2C devices is done in
|
||||
subnodes of the master controller.
|
||||
|
||||
Example::
|
||||
Example:
|
||||
|
||||
.. code-block:: dts
|
||||
|
||||
i2c1: i2c@400a0000 {
|
||||
/* ... master properties skipped ... */
|
||||
@ -71,7 +73,9 @@ code. Instantiating I2C devices via board files is done with an array of
|
||||
struct i2c_board_info which is registered by calling
|
||||
i2c_register_board_info().
|
||||
|
||||
Example (from omap2 h4)::
|
||||
Example (from omap2 h4):
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
static struct i2c_board_info h4_i2c_board_info[] __initdata = {
|
||||
{
|
||||
@ -111,7 +115,9 @@ bus in advance, so the method 1 described above can't be used. Instead,
|
||||
you can instantiate your I2C devices explicitly. This is done by filling
|
||||
a struct i2c_board_info and calling i2c_new_client_device().
|
||||
|
||||
Example (from the sfe4001 network driver)::
|
||||
Example (from the sfe4001 network driver):
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
static struct i2c_board_info sfe4001_hwmon_info = {
|
||||
I2C_BOARD_INFO("max6647", 0x4e),
|
||||
@ -136,7 +142,9 @@ it may have different addresses from one board to the next (manufacturer
|
||||
changing its design without notice). In this case, you can call
|
||||
i2c_new_scanned_device() instead of i2c_new_client_device().
|
||||
|
||||
Example (from the nxp OHCI driver)::
|
||||
Example (from the nxp OHCI driver):
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
static const unsigned short normal_i2c[] = { 0x2c, 0x2d, I2C_CLIENT_END };
|
||||
|
||||
|
@ -41,12 +41,12 @@ Sr Repeated start condition, used to switch from write to
|
||||
P Stop condition
|
||||
Rd/Wr (1 bit) Read/Write bit. Rd equals 1, Wr equals 0.
|
||||
A, NA (1 bit) Acknowledge (ACK) and Not Acknowledge (NACK) bit
|
||||
Addr (7 bits) I2C 7 bit address. Note that this can be expanded as usual to
|
||||
Addr (7 bits) I2C 7 bit address. Note that this can be expanded to
|
||||
get a 10 bit I2C address.
|
||||
Comm (8 bits) Command byte, a data byte which often selects a register on
|
||||
the device.
|
||||
Data (8 bits) A plain data byte. Sometimes, I write DataLow, DataHigh
|
||||
for 16 bit data.
|
||||
Data (8 bits) A plain data byte. DataLow and DataHigh represent the low and
|
||||
high byte of a 16 bit word.
|
||||
Count (8 bits) A data byte containing the length of a block operation.
|
||||
|
||||
[..] Data sent by I2C device, as opposed to data sent by the host
|
||||
|
@ -16887,7 +16887,7 @@ M: Robert Foss <robert.foss@linaro.org>
|
||||
L: linux-i2c@vger.kernel.org
|
||||
L: linux-arm-msm@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/i2c/i2c-qcom-cci.txt
|
||||
F: Documentation/devicetree/bindings/i2c/qcom,i2c-cci.yaml
|
||||
F: drivers/i2c/busses/i2c-qcom-cci.c
|
||||
|
||||
QUALCOMM INTERCONNECT BWMON DRIVER
|
||||
|
@ -447,7 +447,7 @@ static int altr_i2c_probe(struct platform_device *pdev)
|
||||
mutex_unlock(&idev->isr_mutex);
|
||||
|
||||
i2c_set_adapdata(&idev->adapter, idev);
|
||||
strlcpy(idev->adapter.name, pdev->name, sizeof(idev->adapter.name));
|
||||
strscpy(idev->adapter.name, pdev->name, sizeof(idev->adapter.name));
|
||||
idev->adapter.owner = THIS_MODULE;
|
||||
idev->adapter.algo = &altr_i2c_algo;
|
||||
idev->adapter.dev.parent = &pdev->dev;
|
||||
|
@ -1022,7 +1022,7 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
|
||||
bus->adap.algo = &aspeed_i2c_algo;
|
||||
bus->adap.dev.parent = &pdev->dev;
|
||||
bus->adap.dev.of_node = pdev->dev.of_node;
|
||||
strlcpy(bus->adap.name, pdev->name, sizeof(bus->adap.name));
|
||||
strscpy(bus->adap.name, pdev->name, sizeof(bus->adap.name));
|
||||
i2c_set_adapdata(&bus->adap, bus);
|
||||
|
||||
bus->dev = &pdev->dev;
|
||||
|
@ -321,7 +321,7 @@ i2c_au1550_probe(struct platform_device *pdev)
|
||||
priv->adap.algo = &au1550_algo;
|
||||
priv->adap.algo_data = priv;
|
||||
priv->adap.dev.parent = &pdev->dev;
|
||||
strlcpy(priv->adap.name, "Au1xxx PSC I2C", sizeof(priv->adap.name));
|
||||
strscpy(priv->adap.name, "Au1xxx PSC I2C", sizeof(priv->adap.name));
|
||||
|
||||
/* Now, set up the PSC for SMBus PIO mode. */
|
||||
i2c_au1550_setup(priv);
|
||||
|
@ -783,7 +783,7 @@ static int axxia_i2c_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
i2c_set_adapdata(&idev->adapter, idev);
|
||||
strlcpy(idev->adapter.name, pdev->name, sizeof(idev->adapter.name));
|
||||
strscpy(idev->adapter.name, pdev->name, sizeof(idev->adapter.name));
|
||||
idev->adapter.owner = THIS_MODULE;
|
||||
idev->adapter.algo = &axxia_i2c_algo;
|
||||
idev->adapter.bus_recovery_info = &axxia_i2c_recovery_info;
|
||||
|
@ -839,7 +839,7 @@ static int bcm_kona_i2c_probe(struct platform_device *pdev)
|
||||
adap = &dev->adapter;
|
||||
i2c_set_adapdata(adap, dev);
|
||||
adap->owner = THIS_MODULE;
|
||||
strlcpy(adap->name, "Broadcom I2C adapter", sizeof(adap->name));
|
||||
strscpy(adap->name, "Broadcom I2C adapter", sizeof(adap->name));
|
||||
adap->algo = &bcm_algo;
|
||||
adap->dev.parent = &pdev->dev;
|
||||
adap->dev.of_node = pdev->dev.of_node;
|
||||
|
@ -674,7 +674,7 @@ static int brcmstb_i2c_probe(struct platform_device *pdev)
|
||||
adap = &dev->adapter;
|
||||
i2c_set_adapdata(adap, dev);
|
||||
adap->owner = THIS_MODULE;
|
||||
strlcpy(adap->name, dev_name(&pdev->dev), sizeof(adap->name));
|
||||
strscpy(adap->name, dev_name(&pdev->dev), sizeof(adap->name));
|
||||
adap->algo = &brcmstb_i2c_algo;
|
||||
adap->dev.parent = &pdev->dev;
|
||||
adap->dev.of_node = pdev->dev.of_node;
|
||||
|
@ -245,7 +245,7 @@ static int cbus_i2c_probe(struct platform_device *pdev)
|
||||
adapter->nr = pdev->id;
|
||||
adapter->timeout = HZ;
|
||||
adapter->algo = &cbus_i2c_algo;
|
||||
strlcpy(adapter->name, "CBUS I2C adapter", sizeof(adapter->name));
|
||||
strscpy(adapter->name, "CBUS I2C adapter", sizeof(adapter->name));
|
||||
|
||||
spin_lock_init(&chost->lock);
|
||||
chost->dev = &pdev->dev;
|
||||
|
@ -404,7 +404,7 @@ static int cht_wc_i2c_adap_i2c_probe(struct platform_device *pdev)
|
||||
adap->adapter.class = I2C_CLASS_HWMON;
|
||||
adap->adapter.algo = &cht_wc_i2c_adap_algo;
|
||||
adap->adapter.lock_ops = &cht_wc_i2c_adap_lock_ops;
|
||||
strlcpy(adap->adapter.name, "PMIC I2C Adapter",
|
||||
strscpy(adap->adapter.name, "PMIC I2C Adapter",
|
||||
sizeof(adap->adapter.name));
|
||||
adap->adapter.dev.parent = &pdev->dev;
|
||||
|
||||
|
@ -267,7 +267,7 @@ static int ec_i2c_probe(struct platform_device *pdev)
|
||||
bus->dev = dev;
|
||||
|
||||
bus->adap.owner = THIS_MODULE;
|
||||
strlcpy(bus->adap.name, "cros-ec-i2c-tunnel", sizeof(bus->adap.name));
|
||||
strscpy(bus->adap.name, "cros-ec-i2c-tunnel", sizeof(bus->adap.name));
|
||||
bus->adap.algo = &ec_i2c_algorithm;
|
||||
bus->adap.algo_data = bus;
|
||||
bus->adap.dev.parent = &pdev->dev;
|
||||
|
@ -845,7 +845,7 @@ static int davinci_i2c_probe(struct platform_device *pdev)
|
||||
i2c_set_adapdata(adap, dev);
|
||||
adap->owner = THIS_MODULE;
|
||||
adap->class = I2C_CLASS_DEPRECATED;
|
||||
strlcpy(adap->name, "DaVinci I2C adapter", sizeof(adap->name));
|
||||
strscpy(adap->name, "DaVinci I2C adapter", sizeof(adap->name));
|
||||
adap->algo = &i2c_davinci_algo;
|
||||
adap->dev.parent = &pdev->dev;
|
||||
adap->timeout = DAVINCI_I2C_TIMEOUT;
|
||||
|
@ -322,7 +322,7 @@ static int dc_i2c_probe(struct platform_device *pdev)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
strlcpy(i2c->adap.name, "Conexant Digicolor I2C adapter",
|
||||
strscpy(i2c->adap.name, "Conexant Digicolor I2C adapter",
|
||||
sizeof(i2c->adap.name));
|
||||
i2c->adap.owner = THIS_MODULE;
|
||||
i2c->adap.algo = &dc_i2c_algorithm;
|
||||
|
@ -773,7 +773,7 @@ static int pch_i2c_probe(struct pci_dev *pdev,
|
||||
|
||||
pch_adap->owner = THIS_MODULE;
|
||||
pch_adap->class = I2C_CLASS_HWMON;
|
||||
strlcpy(pch_adap->name, KBUILD_MODNAME, sizeof(pch_adap->name));
|
||||
strscpy(pch_adap->name, KBUILD_MODNAME, sizeof(pch_adap->name));
|
||||
pch_adap->algo = &pch_algorithm;
|
||||
pch_adap->algo_data = &adap_info->pch_data[i];
|
||||
|
||||
|
@ -371,7 +371,7 @@ static int em_i2c_probe(struct platform_device *pdev)
|
||||
if (IS_ERR(priv->base))
|
||||
return PTR_ERR(priv->base);
|
||||
|
||||
strlcpy(priv->adap.name, "EMEV2 I2C", sizeof(priv->adap.name));
|
||||
strscpy(priv->adap.name, "EMEV2 I2C", sizeof(priv->adap.name));
|
||||
|
||||
priv->sclk = devm_clk_get(&pdev->dev, "sclk");
|
||||
if (IS_ERR(priv->sclk))
|
||||
|
@ -802,7 +802,7 @@ static int exynos5_i2c_probe(struct platform_device *pdev)
|
||||
if (of_property_read_u32(np, "clock-frequency", &i2c->op_clock))
|
||||
i2c->op_clock = I2C_MAX_STANDARD_MODE_FREQ;
|
||||
|
||||
strlcpy(i2c->adap.name, "exynos5-i2c", sizeof(i2c->adap.name));
|
||||
strscpy(i2c->adap.name, "exynos5-i2c", sizeof(i2c->adap.name));
|
||||
i2c->adap.owner = THIS_MODULE;
|
||||
i2c->adap.algo = &exynos5_i2c_algorithm;
|
||||
i2c->adap.retries = 3;
|
||||
|
@ -436,7 +436,7 @@ static int i2c_gpio_probe(struct platform_device *pdev)
|
||||
|
||||
adap->owner = THIS_MODULE;
|
||||
if (np)
|
||||
strlcpy(adap->name, dev_name(dev), sizeof(adap->name));
|
||||
strscpy(adap->name, dev_name(dev), sizeof(adap->name));
|
||||
else
|
||||
snprintf(adap->name, sizeof(adap->name), "i2c-gpio%d", pdev->id);
|
||||
|
||||
|
@ -402,7 +402,7 @@ static int highlander_i2c_probe(struct platform_device *pdev)
|
||||
i2c_set_adapdata(adap, dev);
|
||||
adap->owner = THIS_MODULE;
|
||||
adap->class = I2C_CLASS_HWMON;
|
||||
strlcpy(adap->name, "HL FPGA I2C adapter", sizeof(adap->name));
|
||||
strscpy(adap->name, "HL FPGA I2C adapter", sizeof(adap->name));
|
||||
adap->algo = &highlander_i2c_algo;
|
||||
adap->dev.parent = &pdev->dev;
|
||||
adap->nr = pdev->id;
|
||||
|
@ -423,7 +423,7 @@ static int hix5hd2_i2c_probe(struct platform_device *pdev)
|
||||
}
|
||||
clk_prepare_enable(priv->clk);
|
||||
|
||||
strlcpy(priv->adap.name, "hix5hd2-i2c", sizeof(priv->adap.name));
|
||||
strscpy(priv->adap.name, "hix5hd2-i2c", sizeof(priv->adap.name));
|
||||
priv->dev = &pdev->dev;
|
||||
priv->adap.owner = THIS_MODULE;
|
||||
priv->adap.algo = &hix5hd2_i2c_algorithm;
|
||||
|
@ -1116,7 +1116,7 @@ static void dmi_check_onboard_device(u8 type, const char *name,
|
||||
|
||||
memset(&info, 0, sizeof(struct i2c_board_info));
|
||||
info.addr = dmi_devices[i].i2c_addr;
|
||||
strlcpy(info.type, dmi_devices[i].i2c_type, I2C_NAME_SIZE);
|
||||
strscpy(info.type, dmi_devices[i].i2c_type, I2C_NAME_SIZE);
|
||||
i2c_new_client_device(adap, &info);
|
||||
break;
|
||||
}
|
||||
@ -1267,7 +1267,7 @@ static void register_dell_lis3lv02d_i2c_device(struct i801_priv *priv)
|
||||
|
||||
memset(&info, 0, sizeof(struct i2c_board_info));
|
||||
info.addr = dell_lis3lv02d_devices[i].i2c_addr;
|
||||
strlcpy(info.type, "lis3lv02d", I2C_NAME_SIZE);
|
||||
strscpy(info.type, "lis3lv02d", I2C_NAME_SIZE);
|
||||
i2c_new_client_device(&priv->adapter, &info);
|
||||
}
|
||||
|
||||
|
@ -738,7 +738,7 @@ static int iic_probe(struct platform_device *ofdev)
|
||||
adap = &dev->adap;
|
||||
adap->dev.parent = &ofdev->dev;
|
||||
adap->dev.of_node = of_node_get(np);
|
||||
strlcpy(adap->name, "IBM IIC", sizeof(adap->name));
|
||||
strscpy(adap->name, "IBM IIC", sizeof(adap->name));
|
||||
i2c_set_adapdata(adap, dev);
|
||||
adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
|
||||
adap->algo = &iic_algo;
|
||||
|
@ -141,7 +141,7 @@ static int icy_probe(struct zorro_dev *z,
|
||||
i2c->adapter.owner = THIS_MODULE;
|
||||
/* i2c->adapter.algo assigned by i2c_pcf_add_bus() */
|
||||
i2c->adapter.algo_data = algo_data;
|
||||
strlcpy(i2c->adapter.name, "ICY I2C Zorro adapter",
|
||||
strscpy(i2c->adapter.name, "ICY I2C Zorro adapter",
|
||||
sizeof(i2c->adapter.name));
|
||||
|
||||
if (!devm_request_mem_region(&z->dev,
|
||||
|
@ -558,7 +558,7 @@ static int lpi2c_imx_probe(struct platform_device *pdev)
|
||||
lpi2c_imx->adapter.algo = &lpi2c_imx_algo;
|
||||
lpi2c_imx->adapter.dev.parent = &pdev->dev;
|
||||
lpi2c_imx->adapter.dev.of_node = pdev->dev.of_node;
|
||||
strlcpy(lpi2c_imx->adapter.name, pdev->name,
|
||||
strscpy(lpi2c_imx->adapter.name, pdev->name,
|
||||
sizeof(lpi2c_imx->adapter.name));
|
||||
|
||||
lpi2c_imx->clk = devm_clk_get(&pdev->dev, NULL);
|
||||
|
@ -303,6 +303,7 @@ static int kempld_i2c_probe(struct platform_device *pdev)
|
||||
i2c->dev = &pdev->dev;
|
||||
i2c->adap = kempld_i2c_adapter;
|
||||
i2c->adap.dev.parent = i2c->dev;
|
||||
ACPI_COMPANION_SET(&i2c->adap.dev, ACPI_COMPANION(&pdev->dev));
|
||||
i2c_set_adapdata(&i2c->adap, i2c);
|
||||
platform_set_drvdata(pdev, i2c);
|
||||
|
||||
|
@ -417,7 +417,7 @@ static int i2c_lpc2k_probe(struct platform_device *pdev)
|
||||
|
||||
i2c_set_adapdata(&i2c->adap, i2c);
|
||||
i2c->adap.owner = THIS_MODULE;
|
||||
strlcpy(i2c->adap.name, "LPC2K I2C adapter", sizeof(i2c->adap.name));
|
||||
strscpy(i2c->adap.name, "LPC2K I2C adapter", sizeof(i2c->adap.name));
|
||||
i2c->adap.algo = &i2c_lpc2k_algorithm;
|
||||
i2c->adap.dev.parent = &pdev->dev;
|
||||
i2c->adap.dev.of_node = pdev->dev.of_node;
|
||||
|
@ -502,7 +502,7 @@ static int meson_i2c_probe(struct platform_device *pdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
strlcpy(i2c->adap.name, "Meson I2C adapter",
|
||||
strscpy(i2c->adap.name, "Meson I2C adapter",
|
||||
sizeof(i2c->adap.name));
|
||||
i2c->adap.owner = THIS_MODULE;
|
||||
i2c->adap.algo = &meson_i2c_algorithm;
|
||||
|
@ -206,7 +206,7 @@ static void mchp_corei2c_empty_rx(struct mchp_corei2c_dev *idev)
|
||||
idev->msg_len--;
|
||||
}
|
||||
|
||||
if (idev->msg_len == 0) {
|
||||
if (idev->msg_len <= 1) {
|
||||
ctrl = readb(idev->base + CORE_I2C_CTRL);
|
||||
ctrl &= ~CTRL_AA;
|
||||
writeb(ctrl, idev->base + CORE_I2C_CTRL);
|
||||
|
@ -229,6 +229,35 @@ static const u16 mt_i2c_regs_v2[] = {
|
||||
[OFFSET_DCM_EN] = 0xf88,
|
||||
};
|
||||
|
||||
static const u16 mt_i2c_regs_v3[] = {
|
||||
[OFFSET_DATA_PORT] = 0x0,
|
||||
[OFFSET_INTR_MASK] = 0x8,
|
||||
[OFFSET_INTR_STAT] = 0xc,
|
||||
[OFFSET_CONTROL] = 0x10,
|
||||
[OFFSET_TRANSFER_LEN] = 0x14,
|
||||
[OFFSET_TRANSAC_LEN] = 0x18,
|
||||
[OFFSET_DELAY_LEN] = 0x1c,
|
||||
[OFFSET_TIMING] = 0x20,
|
||||
[OFFSET_START] = 0x24,
|
||||
[OFFSET_EXT_CONF] = 0x28,
|
||||
[OFFSET_LTIMING] = 0x2c,
|
||||
[OFFSET_HS] = 0x30,
|
||||
[OFFSET_IO_CONFIG] = 0x34,
|
||||
[OFFSET_FIFO_ADDR_CLR] = 0x38,
|
||||
[OFFSET_SDA_TIMING] = 0x3c,
|
||||
[OFFSET_TRANSFER_LEN_AUX] = 0x44,
|
||||
[OFFSET_CLOCK_DIV] = 0x48,
|
||||
[OFFSET_SOFTRESET] = 0x50,
|
||||
[OFFSET_MULTI_DMA] = 0x8c,
|
||||
[OFFSET_SCL_MIS_COMP_POINT] = 0x90,
|
||||
[OFFSET_SLAVE_ADDR] = 0x94,
|
||||
[OFFSET_DEBUGSTAT] = 0xe4,
|
||||
[OFFSET_DEBUGCTRL] = 0xe8,
|
||||
[OFFSET_FIFO_STAT] = 0xf4,
|
||||
[OFFSET_FIFO_THRESH] = 0xf8,
|
||||
[OFFSET_DCM_EN] = 0xf88,
|
||||
};
|
||||
|
||||
struct mtk_i2c_compatible {
|
||||
const struct i2c_adapter_quirks *quirks;
|
||||
const u16 *regs;
|
||||
@ -442,6 +471,19 @@ static const struct mtk_i2c_compatible mt8186_compat = {
|
||||
.max_dma_support = 36,
|
||||
};
|
||||
|
||||
static const struct mtk_i2c_compatible mt8188_compat = {
|
||||
.regs = mt_i2c_regs_v3,
|
||||
.pmic_i2c = 0,
|
||||
.dcm = 0,
|
||||
.auto_restart = 1,
|
||||
.aux_len_reg = 1,
|
||||
.timing_adjust = 1,
|
||||
.dma_sync = 0,
|
||||
.ltiming_adjust = 1,
|
||||
.apdma_sync = 1,
|
||||
.max_dma_support = 36,
|
||||
};
|
||||
|
||||
static const struct mtk_i2c_compatible mt8192_compat = {
|
||||
.quirks = &mt8183_i2c_quirks,
|
||||
.regs = mt_i2c_regs_v2,
|
||||
@ -465,6 +507,7 @@ static const struct of_device_id mtk_i2c_of_match[] = {
|
||||
{ .compatible = "mediatek,mt8173-i2c", .data = &mt8173_compat },
|
||||
{ .compatible = "mediatek,mt8183-i2c", .data = &mt8183_compat },
|
||||
{ .compatible = "mediatek,mt8186-i2c", .data = &mt8186_compat },
|
||||
{ .compatible = "mediatek,mt8188-i2c", .data = &mt8188_compat },
|
||||
{ .compatible = "mediatek,mt8192-i2c", .data = &mt8192_compat },
|
||||
{}
|
||||
};
|
||||
@ -1389,7 +1432,7 @@ static int mtk_i2c_probe(struct platform_device *pdev)
|
||||
speed_clk = I2C_MT65XX_CLK_MAIN;
|
||||
}
|
||||
|
||||
strlcpy(i2c->adap.name, I2C_DRV_NAME, sizeof(i2c->adap.name));
|
||||
strscpy(i2c->adap.name, I2C_DRV_NAME, sizeof(i2c->adap.name));
|
||||
|
||||
ret = mtk_i2c_set_speed(i2c, clk_get_rate(i2c->clocks[speed_clk].clk));
|
||||
if (ret) {
|
||||
|
@ -312,7 +312,7 @@ static int mtk_i2c_probe(struct platform_device *pdev)
|
||||
adap->dev.parent = &pdev->dev;
|
||||
i2c_set_adapdata(adap, i2c);
|
||||
adap->dev.of_node = pdev->dev.of_node;
|
||||
strlcpy(adap->name, dev_name(&pdev->dev), sizeof(adap->name));
|
||||
strscpy(adap->name, dev_name(&pdev->dev), sizeof(adap->name));
|
||||
|
||||
platform_set_drvdata(pdev, i2c);
|
||||
|
||||
|
@ -989,7 +989,7 @@ mv64xxx_i2c_probe(struct platform_device *pd)
|
||||
if (IS_ERR(drv_data->reg_base))
|
||||
return PTR_ERR(drv_data->reg_base);
|
||||
|
||||
strlcpy(drv_data->adapter.name, MV64XXX_I2C_CTLR_NAME " adapter",
|
||||
strscpy(drv_data->adapter.name, MV64XXX_I2C_CTLR_NAME " adapter",
|
||||
sizeof(drv_data->adapter.name));
|
||||
|
||||
init_waitqueue_head(&drv_data->waitq);
|
||||
|
@ -838,7 +838,7 @@ static int mxs_i2c_probe(struct platform_device *pdev)
|
||||
return err;
|
||||
|
||||
adap = &i2c->adapter;
|
||||
strlcpy(adap->name, "MXS I2C adapter", sizeof(adap->name));
|
||||
strscpy(adap->name, "MXS I2C adapter", sizeof(adap->name));
|
||||
adap->owner = THIS_MODULE;
|
||||
adap->algo = &mxs_i2c_algo;
|
||||
adap->quirks = &mxs_i2c_quirks;
|
||||
|
@ -299,7 +299,7 @@ static int gpu_i2c_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
|
||||
i2c_set_adapdata(&i2cd->adapter, i2cd);
|
||||
i2cd->adapter.owner = THIS_MODULE;
|
||||
strlcpy(i2cd->adapter.name, "NVIDIA GPU I2C adapter",
|
||||
strscpy(i2cd->adapter.name, "NVIDIA GPU I2C adapter",
|
||||
sizeof(i2cd->adapter.name));
|
||||
i2cd->adapter.algo = &gpu_i2c_algorithm;
|
||||
i2cd->adapter.quirks = &gpu_i2c_quirks;
|
||||
|
@ -1488,7 +1488,7 @@ omap_i2c_probe(struct platform_device *pdev)
|
||||
i2c_set_adapdata(adap, omap);
|
||||
adap->owner = THIS_MODULE;
|
||||
adap->class = I2C_CLASS_DEPRECATED;
|
||||
strlcpy(adap->name, "OMAP I2C adapter", sizeof(adap->name));
|
||||
strscpy(adap->name, "OMAP I2C adapter", sizeof(adap->name));
|
||||
adap->algo = &omap_i2c_algo;
|
||||
adap->quirks = &omap_i2c_quirks;
|
||||
adap->dev.parent = &pdev->dev;
|
||||
|
@ -220,9 +220,9 @@ static int i2c_opal_probe(struct platform_device *pdev)
|
||||
adapter->dev.of_node = of_node_get(pdev->dev.of_node);
|
||||
pname = of_get_property(pdev->dev.of_node, "ibm,port-name", NULL);
|
||||
if (pname)
|
||||
strlcpy(adapter->name, pname, sizeof(adapter->name));
|
||||
strscpy(adapter->name, pname, sizeof(adapter->name));
|
||||
else
|
||||
strlcpy(adapter->name, "opal", sizeof(adapter->name));
|
||||
strscpy(adapter->name, "opal", sizeof(adapter->name));
|
||||
|
||||
platform_set_drvdata(pdev, adapter);
|
||||
rc = i2c_add_adapter(adapter);
|
||||
|
@ -308,7 +308,7 @@ static void i2c_parport_attach(struct parport *port)
|
||||
/* Fill the rest of the structure */
|
||||
adapter->adapter.owner = THIS_MODULE;
|
||||
adapter->adapter.class = I2C_CLASS_HWMON;
|
||||
strlcpy(adapter->adapter.name, "Parallel port adapter",
|
||||
strscpy(adapter->adapter.name, "Parallel port adapter",
|
||||
sizeof(adapter->adapter.name));
|
||||
adapter->algo_data = parport_algo_data;
|
||||
/* Slow down if we can't sense SCL */
|
||||
|
@ -1403,7 +1403,7 @@ static int i2c_pxa_probe(struct platform_device *dev)
|
||||
spin_lock_init(&i2c->lock);
|
||||
init_waitqueue_head(&i2c->wait);
|
||||
|
||||
strlcpy(i2c->adap.name, "pxa_i2c-i2c", sizeof(i2c->adap.name));
|
||||
strscpy(i2c->adap.name, "pxa_i2c-i2c", sizeof(i2c->adap.name));
|
||||
|
||||
i2c->clk = devm_clk_get(&dev->dev, NULL);
|
||||
if (IS_ERR(i2c->clk)) {
|
||||
|
@ -494,12 +494,12 @@ static void geni_i2c_gpi_unmap(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,
|
||||
{
|
||||
if (tx_buf) {
|
||||
dma_unmap_single(gi2c->se.dev->parent, tx_addr, msg->len, DMA_TO_DEVICE);
|
||||
i2c_put_dma_safe_msg_buf(tx_buf, msg, false);
|
||||
i2c_put_dma_safe_msg_buf(tx_buf, msg, !gi2c->err);
|
||||
}
|
||||
|
||||
if (rx_buf) {
|
||||
dma_unmap_single(gi2c->se.dev->parent, rx_addr, msg->len, DMA_FROM_DEVICE);
|
||||
i2c_put_dma_safe_msg_buf(rx_buf, msg, false);
|
||||
i2c_put_dma_safe_msg_buf(rx_buf, msg, !gi2c->err);
|
||||
}
|
||||
}
|
||||
|
||||
@ -563,6 +563,7 @@ static int geni_i2c_gpi(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,
|
||||
desc->callback_param = gi2c;
|
||||
|
||||
dmaengine_submit(desc);
|
||||
*buf = dma_buf;
|
||||
*dma_addr_p = addr;
|
||||
|
||||
return 0;
|
||||
@ -816,7 +817,7 @@ static int geni_i2c_probe(struct platform_device *pdev)
|
||||
i2c_set_adapdata(&gi2c->adap, gi2c);
|
||||
gi2c->adap.dev.parent = dev;
|
||||
gi2c->adap.dev.of_node = dev->of_node;
|
||||
strlcpy(gi2c->adap.name, "Geni-I2C", sizeof(gi2c->adap.name));
|
||||
strscpy(gi2c->adap.name, "Geni-I2C", sizeof(gi2c->adap.name));
|
||||
|
||||
ret = geni_icc_get(&gi2c->se, "qup-memory");
|
||||
if (ret)
|
||||
|
@ -1878,7 +1878,7 @@ nodma:
|
||||
qup->adap.dev.of_node = pdev->dev.of_node;
|
||||
qup->is_last = true;
|
||||
|
||||
strlcpy(qup->adap.name, "QUP I2C adapter", sizeof(qup->adap.name));
|
||||
strscpy(qup->adap.name, "QUP I2C adapter", sizeof(qup->adap.name));
|
||||
|
||||
pm_runtime_set_autosuspend_delay(qup->dev, MSEC_PER_SEC);
|
||||
pm_runtime_use_autosuspend(qup->dev);
|
||||
|
@ -1076,7 +1076,7 @@ static int rcar_i2c_probe(struct platform_device *pdev)
|
||||
adap->bus_recovery_info = &rcar_i2c_bri;
|
||||
adap->quirks = &rcar_i2c_quirks;
|
||||
i2c_set_adapdata(adap, priv);
|
||||
strlcpy(adap->name, pdev->name, sizeof(adap->name));
|
||||
strscpy(adap->name, pdev->name, sizeof(adap->name));
|
||||
|
||||
/* Init DMA */
|
||||
sg_init_table(&priv->sg, 1);
|
||||
|
@ -448,7 +448,7 @@ static int riic_i2c_probe(struct platform_device *pdev)
|
||||
|
||||
adap = &riic->adapter;
|
||||
i2c_set_adapdata(adap, riic);
|
||||
strlcpy(adap->name, "Renesas RIIC adapter", sizeof(adap->name));
|
||||
strscpy(adap->name, "Renesas RIIC adapter", sizeof(adap->name));
|
||||
adap->owner = THIS_MODULE;
|
||||
adap->algo = &riic_algo;
|
||||
adap->dev.parent = &pdev->dev;
|
||||
|
@ -1240,7 +1240,7 @@ static int rk3x_i2c_probe(struct platform_device *pdev)
|
||||
/* use common interface to get I2C timing properties */
|
||||
i2c_parse_fw_timings(&pdev->dev, &i2c->t, true);
|
||||
|
||||
strlcpy(i2c->adap.name, "rk3x-i2c", sizeof(i2c->adap.name));
|
||||
strscpy(i2c->adap.name, "rk3x-i2c", sizeof(i2c->adap.name));
|
||||
i2c->adap.owner = THIS_MODULE;
|
||||
i2c->adap.algo = &rk3x_i2c_algorithm;
|
||||
i2c->adap.retries = 3;
|
||||
|
@ -1076,7 +1076,7 @@ static int s3c24xx_i2c_probe(struct platform_device *pdev)
|
||||
else
|
||||
s3c24xx_i2c_parse_dt(pdev->dev.of_node, i2c);
|
||||
|
||||
strlcpy(i2c->adap.name, "s3c2410-i2c", sizeof(i2c->adap.name));
|
||||
strscpy(i2c->adap.name, "s3c2410-i2c", sizeof(i2c->adap.name));
|
||||
i2c->adap.owner = THIS_MODULE;
|
||||
i2c->adap.algo = &s3c24xx_i2c_algorithm;
|
||||
i2c->adap.retries = 2;
|
||||
|
@ -940,7 +940,7 @@ static int sh_mobile_i2c_probe(struct platform_device *dev)
|
||||
adap->nr = dev->id;
|
||||
adap->dev.of_node = dev->dev.of_node;
|
||||
|
||||
strlcpy(adap->name, dev->name, sizeof(adap->name));
|
||||
strscpy(adap->name, dev->name, sizeof(adap->name));
|
||||
|
||||
spin_lock_init(&pd->lock);
|
||||
init_waitqueue_head(&pd->wait);
|
||||
|
@ -99,7 +99,7 @@ static int simtec_i2c_probe(struct platform_device *dev)
|
||||
pd->adap.algo_data = &pd->bit;
|
||||
pd->adap.dev.parent = &dev->dev;
|
||||
|
||||
strlcpy(pd->adap.name, "Simtec I2C", sizeof(pd->adap.name));
|
||||
strscpy(pd->adap.name, "Simtec I2C", sizeof(pd->adap.name));
|
||||
|
||||
pd->bit.data = pd;
|
||||
pd->bit.setsda = simtec_i2c_setsda;
|
||||
|
@ -239,7 +239,7 @@ static int taos_connect(struct serio *serio, struct serio_driver *drv)
|
||||
dev_err(&serio->dev, "TAOS EVM identification failed\n");
|
||||
goto exit_close;
|
||||
}
|
||||
strlcpy(adapter->name, name, sizeof(adapter->name));
|
||||
strscpy(adapter->name, name, sizeof(adapter->name));
|
||||
|
||||
/* Turn echo off for better performance */
|
||||
taos->state = TAOS_STATE_EOFF;
|
||||
|
@ -305,7 +305,7 @@ static int tegra_bpmp_i2c_probe(struct platform_device *pdev)
|
||||
|
||||
i2c_set_adapdata(&i2c->adapter, i2c);
|
||||
i2c->adapter.owner = THIS_MODULE;
|
||||
strlcpy(i2c->adapter.name, "Tegra BPMP I2C adapter",
|
||||
strscpy(i2c->adapter.name, "Tegra BPMP I2C adapter",
|
||||
sizeof(i2c->adapter.name));
|
||||
i2c->adapter.algo = &tegra_bpmp_i2c_algo;
|
||||
i2c->adapter.dev.parent = &pdev->dev;
|
||||
|
@ -1825,7 +1825,7 @@ static int tegra_i2c_probe(struct platform_device *pdev)
|
||||
if (i2c_dev->hw->supports_bus_clear)
|
||||
i2c_dev->adapter.bus_recovery_info = &tegra_i2c_recovery_info;
|
||||
|
||||
strlcpy(i2c_dev->adapter.name, dev_name(i2c_dev->dev),
|
||||
strscpy(i2c_dev->adapter.name, dev_name(i2c_dev->dev),
|
||||
sizeof(i2c_dev->adapter.name));
|
||||
|
||||
err = i2c_add_numbered_adapter(&i2c_dev->adapter);
|
||||
|
@ -564,7 +564,7 @@ static int uniphier_fi2c_probe(struct platform_device *pdev)
|
||||
priv->adap.algo = &uniphier_fi2c_algo;
|
||||
priv->adap.dev.parent = dev;
|
||||
priv->adap.dev.of_node = dev->of_node;
|
||||
strlcpy(priv->adap.name, "UniPhier FI2C", sizeof(priv->adap.name));
|
||||
strscpy(priv->adap.name, "UniPhier FI2C", sizeof(priv->adap.name));
|
||||
priv->adap.bus_recovery_info = &uniphier_fi2c_bus_recovery_info;
|
||||
i2c_set_adapdata(&priv->adap, priv);
|
||||
platform_set_drvdata(pdev, priv);
|
||||
|
@ -358,7 +358,7 @@ static int uniphier_i2c_probe(struct platform_device *pdev)
|
||||
priv->adap.algo = &uniphier_i2c_algo;
|
||||
priv->adap.dev.parent = dev;
|
||||
priv->adap.dev.of_node = dev->of_node;
|
||||
strlcpy(priv->adap.name, "UniPhier I2C", sizeof(priv->adap.name));
|
||||
strscpy(priv->adap.name, "UniPhier I2C", sizeof(priv->adap.name));
|
||||
priv->adap.bus_recovery_info = &uniphier_i2c_bus_recovery_info;
|
||||
i2c_set_adapdata(&priv->adap, priv);
|
||||
platform_set_drvdata(pdev, priv);
|
||||
|
@ -79,7 +79,7 @@ static int i2c_versatile_probe(struct platform_device *dev)
|
||||
writel(SCL | SDA, i2c->base + I2C_CONTROLS);
|
||||
|
||||
i2c->adap.owner = THIS_MODULE;
|
||||
strlcpy(i2c->adap.name, "Versatile I2C adapter", sizeof(i2c->adap.name));
|
||||
strscpy(i2c->adap.name, "Versatile I2C adapter", sizeof(i2c->adap.name));
|
||||
i2c->adap.algo_data = &i2c->algo;
|
||||
i2c->adap.dev.parent = &dev->dev;
|
||||
i2c->adap.dev.of_node = dev->dev.of_node;
|
||||
|
@ -413,7 +413,7 @@ static int wmt_i2c_probe(struct platform_device *pdev)
|
||||
|
||||
adap = &i2c_dev->adapter;
|
||||
i2c_set_adapdata(adap, i2c_dev);
|
||||
strlcpy(adap->name, "WMT I2C adapter", sizeof(adap->name));
|
||||
strscpy(adap->name, "WMT I2C adapter", sizeof(adap->name));
|
||||
adap->owner = THIS_MODULE;
|
||||
adap->algo = &wmt_i2c_algo;
|
||||
adap->dev.parent = &pdev->dev;
|
||||
|
@ -933,7 +933,7 @@ i2c_new_client_device(struct i2c_adapter *adap, struct i2c_board_info const *inf
|
||||
client->init_irq = i2c_dev_irq_from_resources(info->resources,
|
||||
info->num_resources);
|
||||
|
||||
strlcpy(client->name, info->type, sizeof(client->name));
|
||||
strscpy(client->name, info->type, sizeof(client->name));
|
||||
|
||||
status = i2c_check_addr_validity(client->addr, client->flags);
|
||||
if (status) {
|
||||
|
@ -391,7 +391,7 @@ void i2c_register_spd(struct i2c_adapter *adap)
|
||||
unsigned short addr_list[2];
|
||||
|
||||
memset(&info, 0, sizeof(struct i2c_board_info));
|
||||
strlcpy(info.type, name, I2C_NAME_SIZE);
|
||||
strscpy(info.type, name, I2C_NAME_SIZE);
|
||||
addr_list[0] = 0x50 + n;
|
||||
addr_list[1] = I2C_CLIENT_END;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user