1f5fbb83fSMauro Carvalho Chehab /* SPDX-License-Identifier: GPL-2.0 */ 29d4fa1a1SMauro Carvalho Chehab /* 39d4fa1a1SMauro Carvalho Chehab * Support for Intel Camera Imaging ISP subsystem. 49d4fa1a1SMauro Carvalho Chehab * Copyright (c) 2015, Intel Corporation. 59d4fa1a1SMauro Carvalho Chehab * 69d4fa1a1SMauro Carvalho Chehab * This program is free software; you can redistribute it and/or modify it 79d4fa1a1SMauro Carvalho Chehab * under the terms and conditions of the GNU General Public License, 89d4fa1a1SMauro Carvalho Chehab * version 2, as published by the Free Software Foundation. 99d4fa1a1SMauro Carvalho Chehab * 109d4fa1a1SMauro Carvalho Chehab * This program is distributed in the hope it will be useful, but WITHOUT 119d4fa1a1SMauro Carvalho Chehab * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 129d4fa1a1SMauro Carvalho Chehab * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 139d4fa1a1SMauro Carvalho Chehab * more details. 149d4fa1a1SMauro Carvalho Chehab */ 159d4fa1a1SMauro Carvalho Chehab 169d4fa1a1SMauro Carvalho Chehab #ifndef __ISP_PUBLIC_H_INCLUDED__ 179d4fa1a1SMauro Carvalho Chehab #define __ISP_PUBLIC_H_INCLUDED__ 189d4fa1a1SMauro Carvalho Chehab 199d4fa1a1SMauro Carvalho Chehab #include <type_support.h> 20f90e73ceSMauro Carvalho Chehab #include "system_local.h" 219d4fa1a1SMauro Carvalho Chehab 229d4fa1a1SMauro Carvalho Chehab /*! Enable or disable the program complete irq signal of ISP[ID] 239d4fa1a1SMauro Carvalho Chehab 249d4fa1a1SMauro Carvalho Chehab \param ID[in] SP identifier 259d4fa1a1SMauro Carvalho Chehab \param cnd[in] predicate 269d4fa1a1SMauro Carvalho Chehab 279d4fa1a1SMauro Carvalho Chehab \return none, if(cnd) enable(ISP[ID].irq) else disable(ISP[ID].irq) 289d4fa1a1SMauro Carvalho Chehab */ 299d4fa1a1SMauro Carvalho Chehab void cnd_isp_irq_enable( 309d4fa1a1SMauro Carvalho Chehab const isp_ID_t ID, 319d4fa1a1SMauro Carvalho Chehab const bool cnd); 329d4fa1a1SMauro Carvalho Chehab 339d4fa1a1SMauro Carvalho Chehab /*! Read the state of cell ISP[ID] 349d4fa1a1SMauro Carvalho Chehab 359d4fa1a1SMauro Carvalho Chehab \param ID[in] ISP identifier 369d4fa1a1SMauro Carvalho Chehab \param state[out] isp state structure 379d4fa1a1SMauro Carvalho Chehab \param stall[out] isp stall conditions 389d4fa1a1SMauro Carvalho Chehab 399d4fa1a1SMauro Carvalho Chehab \return none, state = ISP[ID].state, stall = ISP[ID].stall 409d4fa1a1SMauro Carvalho Chehab */ 419d4fa1a1SMauro Carvalho Chehab void isp_get_state( 429d4fa1a1SMauro Carvalho Chehab const isp_ID_t ID, 439d4fa1a1SMauro Carvalho Chehab isp_state_t *state, 449d4fa1a1SMauro Carvalho Chehab isp_stall_t *stall); 459d4fa1a1SMauro Carvalho Chehab 469d4fa1a1SMauro Carvalho Chehab /*! Write to the status and control register of ISP[ID] 479d4fa1a1SMauro Carvalho Chehab 489d4fa1a1SMauro Carvalho Chehab \param ID[in] ISP identifier 499d4fa1a1SMauro Carvalho Chehab \param reg[in] register index 509d4fa1a1SMauro Carvalho Chehab \param value[in] The data to be written 519d4fa1a1SMauro Carvalho Chehab 529d4fa1a1SMauro Carvalho Chehab \return none, ISP[ID].sc[reg] = value 539d4fa1a1SMauro Carvalho Chehab */ 549d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H void isp_ctrl_store( 559d4fa1a1SMauro Carvalho Chehab const isp_ID_t ID, 569d4fa1a1SMauro Carvalho Chehab const unsigned int reg, 579d4fa1a1SMauro Carvalho Chehab const hrt_data value); 589d4fa1a1SMauro Carvalho Chehab 599d4fa1a1SMauro Carvalho Chehab /*! Read from the status and control register of ISP[ID] 609d4fa1a1SMauro Carvalho Chehab 619d4fa1a1SMauro Carvalho Chehab \param ID[in] ISP identifier 629d4fa1a1SMauro Carvalho Chehab \param reg[in] register index 639d4fa1a1SMauro Carvalho Chehab \param value[in] The data to be written 649d4fa1a1SMauro Carvalho Chehab 659d4fa1a1SMauro Carvalho Chehab \return ISP[ID].sc[reg] 669d4fa1a1SMauro Carvalho Chehab */ 679d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H hrt_data isp_ctrl_load( 689d4fa1a1SMauro Carvalho Chehab const isp_ID_t ID, 699d4fa1a1SMauro Carvalho Chehab const unsigned int reg); 709d4fa1a1SMauro Carvalho Chehab 719d4fa1a1SMauro Carvalho Chehab /*! Get the status of a bitfield in the control register of ISP[ID] 729d4fa1a1SMauro Carvalho Chehab 739d4fa1a1SMauro Carvalho Chehab \param ID[in] ISP identifier 749d4fa1a1SMauro Carvalho Chehab \param reg[in] register index 759d4fa1a1SMauro Carvalho Chehab \param bit[in] The bit index to be checked 769d4fa1a1SMauro Carvalho Chehab 779d4fa1a1SMauro Carvalho Chehab \return (ISP[ID].sc[reg] & (1<<bit)) != 0 789d4fa1a1SMauro Carvalho Chehab */ 799d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H bool isp_ctrl_getbit( 809d4fa1a1SMauro Carvalho Chehab const isp_ID_t ID, 819d4fa1a1SMauro Carvalho Chehab const unsigned int reg, 829d4fa1a1SMauro Carvalho Chehab const unsigned int bit); 839d4fa1a1SMauro Carvalho Chehab 849d4fa1a1SMauro Carvalho Chehab /*! Set a bitfield in the control register of ISP[ID] 859d4fa1a1SMauro Carvalho Chehab 869d4fa1a1SMauro Carvalho Chehab \param ID[in] ISP identifier 879d4fa1a1SMauro Carvalho Chehab \param reg[in] register index 889d4fa1a1SMauro Carvalho Chehab \param bit[in] The bit index to be set 899d4fa1a1SMauro Carvalho Chehab 909d4fa1a1SMauro Carvalho Chehab \return none, ISP[ID].sc[reg] |= (1<<bit) 919d4fa1a1SMauro Carvalho Chehab */ 929d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H void isp_ctrl_setbit( 939d4fa1a1SMauro Carvalho Chehab const isp_ID_t ID, 949d4fa1a1SMauro Carvalho Chehab const unsigned int reg, 959d4fa1a1SMauro Carvalho Chehab const unsigned int bit); 969d4fa1a1SMauro Carvalho Chehab 979d4fa1a1SMauro Carvalho Chehab /*! Clear a bitfield in the control register of ISP[ID] 989d4fa1a1SMauro Carvalho Chehab 999d4fa1a1SMauro Carvalho Chehab \param ID[in] ISP identifier 1009d4fa1a1SMauro Carvalho Chehab \param reg[in] register index 1019d4fa1a1SMauro Carvalho Chehab \param bit[in] The bit index to be set 1029d4fa1a1SMauro Carvalho Chehab 1039d4fa1a1SMauro Carvalho Chehab \return none, ISP[ID].sc[reg] &= ~(1<<bit) 1049d4fa1a1SMauro Carvalho Chehab */ 1059d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H void isp_ctrl_clearbit( 1069d4fa1a1SMauro Carvalho Chehab const isp_ID_t ID, 1079d4fa1a1SMauro Carvalho Chehab const unsigned int reg, 1089d4fa1a1SMauro Carvalho Chehab const unsigned int bit); 1099d4fa1a1SMauro Carvalho Chehab 1109d4fa1a1SMauro Carvalho Chehab /*! Write to the DMEM of ISP[ID] 1119d4fa1a1SMauro Carvalho Chehab 1129d4fa1a1SMauro Carvalho Chehab \param ID[in] ISP identifier 1139d4fa1a1SMauro Carvalho Chehab \param addr[in] the address in DMEM 1149d4fa1a1SMauro Carvalho Chehab \param data[in] The data to be written 1159d4fa1a1SMauro Carvalho Chehab \param size[in] The size(in bytes) of the data to be written 1169d4fa1a1SMauro Carvalho Chehab 1179d4fa1a1SMauro Carvalho Chehab \return none, ISP[ID].dmem[addr...addr+size-1] = data 1189d4fa1a1SMauro Carvalho Chehab */ 1199d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H void isp_dmem_store( 1209d4fa1a1SMauro Carvalho Chehab const isp_ID_t ID, 1219d4fa1a1SMauro Carvalho Chehab unsigned int addr, 1229d4fa1a1SMauro Carvalho Chehab const void *data, 1239d4fa1a1SMauro Carvalho Chehab const size_t size); 1249d4fa1a1SMauro Carvalho Chehab 1259d4fa1a1SMauro Carvalho Chehab /*! Read from the DMEM of ISP[ID] 1269d4fa1a1SMauro Carvalho Chehab 1279d4fa1a1SMauro Carvalho Chehab \param ID[in] ISP identifier 1289d4fa1a1SMauro Carvalho Chehab \param addr[in] the address in DMEM 1299d4fa1a1SMauro Carvalho Chehab \param data[in] The data to be read 1309d4fa1a1SMauro Carvalho Chehab \param size[in] The size(in bytes) of the data to be read 1319d4fa1a1SMauro Carvalho Chehab 1329d4fa1a1SMauro Carvalho Chehab \return none, data = ISP[ID].dmem[addr...addr+size-1] 1339d4fa1a1SMauro Carvalho Chehab */ 1349d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H void isp_dmem_load( 1359d4fa1a1SMauro Carvalho Chehab const isp_ID_t ID, 1369d4fa1a1SMauro Carvalho Chehab const unsigned int addr, 1379d4fa1a1SMauro Carvalho Chehab void *data, 1389d4fa1a1SMauro Carvalho Chehab const size_t size); 1399d4fa1a1SMauro Carvalho Chehab 1409d4fa1a1SMauro Carvalho Chehab /*! Write a 32-bit datum to the DMEM of ISP[ID] 1419d4fa1a1SMauro Carvalho Chehab 1429d4fa1a1SMauro Carvalho Chehab \param ID[in] ISP identifier 1439d4fa1a1SMauro Carvalho Chehab \param addr[in] the address in DMEM 1449d4fa1a1SMauro Carvalho Chehab \param data[in] The data to be written 1459d4fa1a1SMauro Carvalho Chehab \param size[in] The size(in bytes) of the data to be written 1469d4fa1a1SMauro Carvalho Chehab 1479d4fa1a1SMauro Carvalho Chehab \return none, ISP[ID].dmem[addr] = data 1489d4fa1a1SMauro Carvalho Chehab */ 1499d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H void isp_dmem_store_uint32( 1509d4fa1a1SMauro Carvalho Chehab const isp_ID_t ID, 1519d4fa1a1SMauro Carvalho Chehab unsigned int addr, 1529d4fa1a1SMauro Carvalho Chehab const uint32_t data); 1539d4fa1a1SMauro Carvalho Chehab 1549d4fa1a1SMauro Carvalho Chehab /*! Load a 32-bit datum from the DMEM of ISP[ID] 1559d4fa1a1SMauro Carvalho Chehab 1569d4fa1a1SMauro Carvalho Chehab \param ID[in] ISP identifier 1579d4fa1a1SMauro Carvalho Chehab \param addr[in] the address in DMEM 1589d4fa1a1SMauro Carvalho Chehab \param data[in] The data to be read 1599d4fa1a1SMauro Carvalho Chehab \param size[in] The size(in bytes) of the data to be read 1609d4fa1a1SMauro Carvalho Chehab 1619d4fa1a1SMauro Carvalho Chehab \return none, data = ISP[ID].dmem[addr] 1629d4fa1a1SMauro Carvalho Chehab */ 1639d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H uint32_t isp_dmem_load_uint32( 1649d4fa1a1SMauro Carvalho Chehab const isp_ID_t ID, 1659d4fa1a1SMauro Carvalho Chehab const unsigned int addr); 1669d4fa1a1SMauro Carvalho Chehab 1679d4fa1a1SMauro Carvalho Chehab /*! Concatenate the LSW and MSW into a double precision word 1689d4fa1a1SMauro Carvalho Chehab 1699d4fa1a1SMauro Carvalho Chehab \param x0[in] Integer containing the LSW 1709d4fa1a1SMauro Carvalho Chehab \param x1[in] Integer containing the MSW 1719d4fa1a1SMauro Carvalho Chehab 1729d4fa1a1SMauro Carvalho Chehab \return x0 | (x1 << bits_per_vector_element) 1739d4fa1a1SMauro Carvalho Chehab */ 1749d4fa1a1SMauro Carvalho Chehab STORAGE_CLASS_ISP_H uint32_t isp_2w_cat_1w( 1759d4fa1a1SMauro Carvalho Chehab const u16 x0, 1769d4fa1a1SMauro Carvalho Chehab const uint16_t x1); 1779d4fa1a1SMauro Carvalho Chehab 1789d4fa1a1SMauro Carvalho Chehab unsigned int isp_is_ready(isp_ID_t ID); 1799d4fa1a1SMauro Carvalho Chehab 1809d4fa1a1SMauro Carvalho Chehab unsigned int isp_is_sleeping(isp_ID_t ID); 1819d4fa1a1SMauro Carvalho Chehab 1829d4fa1a1SMauro Carvalho Chehab void isp_start(isp_ID_t ID); 1839d4fa1a1SMauro Carvalho Chehab 1849d4fa1a1SMauro Carvalho Chehab void isp_wake(isp_ID_t ID); 1859d4fa1a1SMauro Carvalho Chehab 1869d4fa1a1SMauro Carvalho Chehab #endif /* __ISP_PUBLIC_H_INCLUDED__ */ 187