From mboxrd@z Thu Jan 1 00:00:00 1970 From: sudeep.holla@arm.com (Sudeep Holla) Date: Fri, 19 Aug 2016 17:22:19 +0100 Subject: [PATCH 04/13] scpi: Add legacy SCP functions calling legacy_scpi_send_message In-Reply-To: <1471515066-3626-5-git-send-email-narmstrong@baylibre.com> References: <1471515066-3626-1-git-send-email-narmstrong@baylibre.com> <1471515066-3626-5-git-send-email-narmstrong@baylibre.com> Message-ID: To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 18/08/16 11:10, Neil Armstrong wrote: > In order to support legacy SCP functions from kernel-wide driver, add legacy > functions using the legacy command enums and calling legacy_scpi_send_message. > > Signed-off-by: Neil Armstrong > --- > drivers/firmware/arm_scpi.c | 118 ++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 118 insertions(+) > > diff --git a/drivers/firmware/arm_scpi.c b/drivers/firmware/arm_scpi.c > index 50b1297..bb9965f 100644 > --- a/drivers/firmware/arm_scpi.c > +++ b/drivers/firmware/arm_scpi.c > @@ -578,6 +578,8 @@ scpi_clk_get_range(u16 clk_id, unsigned long *min, unsigned long *max) > return ret; > } > > +/* scpi_clk_get_range not available for legacy */ > + > static unsigned long scpi_clk_get_val(u16 clk_id) > { > int ret; > @@ -589,6 +591,18 @@ static unsigned long scpi_clk_get_val(u16 clk_id) > return ret ? ret : le32_to_cpu(clk.rate); > } > > +static unsigned long legacy_scpi_clk_get_val(u16 clk_id) > +{ > + int ret; > + struct clk_get_value clk; > + __le16 le_clk_id = cpu_to_le16(clk_id); > + > + ret = legacy_scpi_send_message(LEGACY_SCPI_CMD_GET_CLOCK_VALUE, > + &le_clk_id, sizeof(le_clk_id), > + &clk, sizeof(clk)); > + return ret ? ret : le32_to_cpu(clk.rate); > +} > + > static int scpi_clk_set_val(u16 clk_id, unsigned long rate) > { > int stat; > @@ -601,6 +615,19 @@ static int scpi_clk_set_val(u16 clk_id, unsigned long rate) > &stat, sizeof(stat)); > } > > +static int legacy_scpi_clk_set_val(u16 clk_id, unsigned long rate) > +{ > + int stat; > + struct legacy_clk_set_value clk = { > + .id = cpu_to_le16(clk_id), > + .rate = cpu_to_le32(rate) > + }; > + > + return legacy_scpi_send_message(LEGACY_SCPI_CMD_SET_CLOCK_VALUE, > + &clk, sizeof(clk), > + &stat, sizeof(stat)); Except this one which has a different structure format, why do we need to define legacy versions of other functions ? Can't we play with function pointer or have a boolean in drvinfo structure and use then in the existing functions as I had shown in one of the earlier emails. -- Regards, Sudeep