PIC18LF24K40 I2C problem
The problem was not configuring PPS registers on initialization for I2C module.

Mentioned in PPS Chapter


  PPS Outputs
  Each I/O pin has a PPS register with which the pin
  output source is selected. With few exceptions, the port
  TRIS control associated with that pin retains control
  over the pin output driver. Peripherals that control the
  pin output driver as part of the peripheral operation will
  override the TRIS control as needed. These
  peripherals include:
  • EUSART (synchronous operation)
  • MSSP (I2C)


And, not configuring ANSELC register. I had to explicitly clear ANSELC bits to get it working. Actually discovered it by accident when i was configuring Receive interrupt, read a Note in Datasheet which was in a corner.


  Note: If the RX/DT function is on an analog pin,
  the corresponding ANSEL bit must be
  cleared for the receiver to function.


It seemed to work for USART, so I tried it for I2C as well. Took only a few days to figure it out, but now I see the corresponding SDA and SCL waveforms. :)

void I2C_Inititalise()
{

    ANSELCbits.ANSELC3 =0;
    ANSELCbits.ANSELC4 =0;

    RC3PPS         = 0x0D; //PPS OUTPUT CLK  
    RC4PPS         = 0x0E; //PPS OUTPUT SDA 

    SSP1CLKPPS     = 0x13; //PPS INPUT CLK
    SSP1DATPPS     = 0x14; //PPS INPUT SDA 

    SSP1CON1       = 0x28;  //I2C Mode
    SSP1CON2       = 0x00; 
    SSP1STAT       = 0x00;   
    SSP1ADD        = 0x04;
}